9

jenkins ジョブ構成を管理する手段として、Jenkins Job-Builder (OpenStack から)を使用して調査しています。!includeそうすることで、カスタムタグ を使用して外部ファイルからジョブテンプレートを含める正しい (最善の) 方法を見つけようとしています。

現在のユース ケースでは、基本的に、多くのジョブで使用される 1 つのテンプレートがあります。ここでの範囲外の理由により、各ジョブは独自のファイルに存在する必要があります。

これまでのところ、これを機能させることができました:

ジョブテンプレート.yml

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

ジョブ-1.yml

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

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

-job-template:テンプレート定義が両方のファイルに分割され、すべてのジョブ ファイルで行を不必要に複製する必要があるため、これは間違っているように見えます。代わりに以下を機能させたいと思います。

ジョブテンプレート.yml

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

ジョブ-1.yml

!include job-template.yml

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

- project:後者は、残念ながら次の行で yaml 解析エラーになります。

yaml.scanner.ScannerError: 「job-1.yml」、行 3、列 10 で値のマッピングは許可されていません

テンプレート定義全体をテンプレート ファイルに入れる方法はありますか? 複数のファイルから複数のテンプレートを取得する必要がある場合、これは特に面倒です。

4

1 に答える 1

10

Jenkins-jobs は、ファイル ( 、およびpath) を保持するディレクトリを引数に取ります。これらは単一の YAML ドキュメントとしてアセンブルされるため、 を使用する必要はありません。したがって、次のように記述できます。job-template.yamljob-1.yamljob-2.yaml!include

ジョブテンプレート.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}'

これにより、次のシェル コマンドで 2 つのジョブが生成されます。

pre-build-my-other-proj-my-other-repo:

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

pre-build-my-proj-my-repo:

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

ファイルがディレクトリにあると仮定すると、次の方法config/ですべてを生成できます。

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

または、name引数を使用して実現されるジョブをフィルタリングします。

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
于 2014-11-27T11:31:42.763 に答える