2014-11-27 19 views
9

Tôi đang điều tra sử dụng Jenkins Job-Builder (từ OpenStack) làm phương tiện quản lý cấu hình công việc jenkins của chúng tôi. Làm như vậy tôi đang cố gắng tìm ra cách đúng (tốt nhất?) Để bao gồm một mẫu công việc từ một tệp bên ngoài bằng cách sử dụng thẻ tùy chỉnh !include.Trình tạo công việc Jenkins: Cách bao gồm đúng mẫu công việc từ tệp bên ngoài?

Trong trường hợp sử dụng hiện tại, về cơ bản chúng tôi sẽ có một mẫu sẽ được sử dụng bởi rất nhiều công việc. Mỗi công việc sẽ cần phải tồn tại trong tập tin riêng của mình vì lý do nằm ngoài phạm vi ở đây.

Cho đến nay tôi đã nhận được để làm việc này:

việc làm template.yml

name: 'pre-build-{proj}-{repo}' 
project-type: freestyle 
... etc ... 

việc làm 1.yml

- job-template: 
    !include job-template.yml 

- project: 
    name: job-1 
    proj: my-proj 
    repo: my-repo 
    jobs: 
     - 'build-config-{proj}-{repo}' 

này dường như sai vì định nghĩa mẫu được chia nhỏ trên cả hai tệp và yêu cầu sao chép không cần thiết của dòng -job-template: trong mọi tệp công việc. Tôi muốn để có được những điều sau đây để làm việc thay vì:

việc làm template.yml

- job-template: 
    name: 'pre-build-{proj}-{repo}' 
    project-type: freestyle 
    ... etc ... 

việc làm 1.yml

!include job-template.yml 

- project: 
    name: job-1 
    proj: my-proj 
    repo: my-repo 
    jobs: 
     - 'build-config-{proj}-{repo}' 

Sau đó không may kết quả trong một yaml lỗi phân tích cú pháp trên đường dây - project::

yaml.scanner.ScannerError: mapping values are not allowed here in "job-1.yml", line 3, column 10

Có cách nào để đưa toàn bộ định nghĩa mẫu vào tệp mẫu không? Điều này sẽ trở nên đặc biệt khó chịu nếu chúng ta cần phải kéo nhiều mẫu từ nhiều tệp.

Trả lời

8

Jenkins-việc làm mất một đối số path có thể là một thư mục giữ tập tin của bạn (job-template.yaml, job-1.yamljob-2.yaml Nó sẽ lắp ráp chúng như là một tài liệu YAML duy nhất, do đó bạn không cần phải sử dụng !include Vì vậy, bạn có thể viết..:

việc làm template.yaml

- job-template: 
    name: 'pre-build-{proj}-{repo}' 
    builders: 
     - shell: 'echo building {proj} for {repo}' 

job1.yaml

- project: 
    name: job-1 
    proj: my-proj 
    repo: my-repo 
    jobs: 
     - 'pre-build-{proj}-{repo}' 

job2.yaml

- project: 
    name: job-2 
    proj: my-other-proj 
    repo: my-other-repo 
    jobs: 
     - 'pre-build-{proj}-{repo}' 

Đó sẽ tạo ra hai công việc với các lệnh sau:

pre-build-my-khác-Proj-my-khác-repo:

<command>echo building my-other-proj for my-other-repo</command> 

trước -build-my-proj-my-repo:

<command>echo building my-proj for my-repo</command> 

Giả sử các tập tin nằm trong thư mục config/ bạn có thể tạo ra tất cả chúng với:

jenkins-jobs test config/ -o /tmp/myjobs 

Hoặc sử dụng lập luận name để lọc các công việc đó sẽ được thực hiện:

jenkins-jobs test config/ -o /tmp/myjobs '*my-proj*' 
# Creates pre-build-my-proj-my-repo 
# Skips pre-build-my-other-proj-my-other-repo 
Các vấn đề liên quan