2016-05-25 2 views
2

В JJB, можно определить переменные на уровне проекта, как это:Дженкинс Работа Builder: Переменные уровня проекта

- defaults: 
    name: global 
    git_url: "[email protected]" 

- project 
    name: some-test 
    jobs: 
     - test-{name} 

- job-template 
    name: test-{name} 
    scm: 
     - git: 
      url: "{git_url}" 
      branches: 
      - master 

Мой вопрос, я должен жёстко значение git_url на уровне по умолчанию, или я могу использовать некоторые Jjb механизм, чтобы принести это при загрузке/выполнении задания?

Причина, по которой я спрашиваю, заключается в том, что скрипт yaml, который содержит эти задания JJB, может использоваться для определения TEST, QA и PROD. Было бы неплохо указать на файл свойств, который содержит значение для git_url и любых других значений глобальных переменных. Я взглянул на: http://docs.openstack.org/infra/jenkins-job-builder/definition.html?highlight=default#defaults, и я не видел никакого механизма.

ответ

2

Если я правильно понимаю ваш вопрос, есть два других подхода, доступные в контексте одного файла YAML

Подход 1: Установка git_url на уровне проекта

- project 
    name: some-test 
    git_url: "[email protected]:woof/bark.git" 
    jobs: 
     - test-{name}: 

- job-template 
    name: test-{name} 
    scm: 
     - git: 
      url: "{git_url}" 
      branches: 
      - master 

Здесь git_url устанавливается на уровень проекта. Такой подход позволяет определить второй проект с другим значением для git_url, т.е.

- project 
    name: some-other-test 
    git_url: "[email protected]:meow/meow.git" 
    jobs: 
     - test-{name}: 

Подвод 2: Установите git_url на работу-шаблон уровня экземпляра

- project 
    name: some-test 
    jobs: 
     - test-{name}: 
     git_url: "[email protected]" 

- job-template 
    name: test-{name} 
    scm: 
     - git: 
      url: "{git_url}" 
      branches: 
      - master 

Здесь git_url устанавливается на фактическое экземпляр шаблона задания, где он указан. Если job-template было больше, чем просто {name} в его названии, это позволит вам создать несколько экземпляров в списке jobs на уровне проекта, т.е.

- project 
    name: some-test 
    git_url: "[email protected]" 
    jobs: 
     - test-{name}-{type}: 
     type: 'cat' 
     - test-{name}-{type}: 
     type: 'dog' 

- job-template 
    name: test-{name}-{type} 
    display-name: 'Test for {type} projects' 
    scm: 
     - git: 
      url: "{git_url}" 
      branches: 
      - master 

Мысли о ТЕСТ против QA против PROD

Вы также упомянули, что хотите, чтобы какой-то файл внешних свойств различал среды TEST, QA и PROD. Для решения этого вопроса рассмотрим четыре разных файла: project.yaml, defaults/TEST.yaml, defaults/QA.yaml, defaults/PROD.yaml, содержание которых перечислено ниже.

project.yaml

- project 
    name: some-test 
    jobs: 
     - test-{name}: 

defaults/TEST.yaml

- defaults: 
    name: global 
    git_url: "[email protected]:woof/test.git" 

defaults/QA.yaml

- defaults: 
    name: global 
    git_url: "[email protected]:woof/qa.git" 

defaults/PROD.yaml

- defaults: 
    name: global 
    git_url: "[email protected]:woof/prod.git" 

Хорошо, так это не большие примеры, потому что вы, вероятно, не будет иметь другой репозиторий для каждой среды, но я не хочу усложнять вещи отклоняясь слишком далеко от вашего оригинальный пример.

С JJB вы можете указать несколько файлов YAML в командной строке (я не хочу усложнять пример или его объяснение, но вы также можете указать каталоги, полные JJB yaml). Для того, чтобы различать TEST, QA и развертывания Prod вашего Дженкинс работы вы можете сделать что-то вроде:

jenkins-jobs project.yaml:defaults/TEST.yaml 

Для тестовой среды.

jenkins-jobs project.yaml:defaults/QA.yaml 

Для вашей окружающей среды qa.

jenkins-jobs project.yaml:defaults/PROD.yaml 

Для вашей окружающей среды.

Надеюсь, что это поможет.

Смежные вопросы