Как я могу запустить другое задание из проекта jenkins (jenkinsfile) с помощью GitHub Org Plugin?
Как я могу запустить сборку другого задания из Jenkinsfile
?
Я предполагаю, что это задание - это другой репозиторий под тем же github organization, который уже имеет свой собственный файл Jenkins.
Я также хочу сделать это, только если имя ветки является мастером, так как нет смысла запускать нисходящие сборки любых локальных ветвей.
Update:
stage 'test-downstream'
node {
def job = build job: 'some-downtream-job-name'
}
Тем не менее, при выполнении я получаю сообщение об ошибке
Не задано параметризованное задание с именем some-down -ream-job-name
Я уверен, что эта работа существует в jenkins и находится в той же самой папке организации, что и текущая. Это другое задание, которое имеет свой собственный Jenkinsfile
.
Обратите внимание, что этот вопрос специфичен для GitHub Organization Plugin, который автоматически создает и поддерживает задания для каждого репозитория и ветки из вашей организации GitHub.
Ответы
Ответ 1
Прежде всего, это отходы слота исполнителя, чтобы обернуть шаг build
в node
. Ваш исполнитель вверх по течению просто сидит без дела без причины.
Во-вторых, из проекта с мультибрендом вы можете использовать переменную среды BRANCH_NAME
, чтобы сделать логику условной для текущей ветки.
В-третьих, параметр job
принимает абсолютное или относительное имя задания. Если вы дадите имя без какой-либо квалификации по пути, это будет ссылаться на другое задание в той же папке, которое в случае мультибрендового проекта будет означать другую ветвь того же репозитория.
Таким образом, вы хотели писать, вероятно,
if (env.BRANCH_NAME == 'master') {
build '../other-repo/master'
}
Ответ 2
В дополнение к вышеупомянутым ответам: я хотел начать работу с простого параметра, переданного во второй конвейер, и нашел ответ на https://dzone.com/refcardz/continuous-delivery-with-jenkins-workflow.
Итак, я использовал:
stage ('Starting ART job') {
build job: 'RunArtInTest', parameters: [[$class: 'StringParameterValue', name: 'systemname', value: systemname]]
}
Ответ 3
Команда build
в конвейере должна запускать другие задания в jenkins.
Пример для github
Работа должна существовать в Дженкинсе и может быть параметризована.
Что касается ветки, я думаю, вы можете прочитать ее из git
Ответ 4
Вы можете использовать шаг build job
из Jenkins Pipeline (минимальное требование Jenkins: 2.130).
Вот полный API для этапа build
: https://jenkins.io/doc/pipeline/steps/pipeline-build-step/
Как использовать build
:
-
job
: имя нижестоящего задания для построения. Может быть другая работа Pipeline, но чаще это фристайл или другой проект. - Используйте простое имя, если задание находится в той же папке, что и задание восходящего конвейера;
- Вместо этого вы можете использовать относительные пути, такие как
../sister-folder/downstream
- Или вы можете использовать абсолютные пути, такие как
/top-level-folder/nested-folder/downstream
Запустить другую работу, используя ветку в качестве параметра
В моей компании многие из наших веток включают "/". Вы должны заменить любые экземпляры "/" на "% 2F" (как это указано в URL-адресе задания).
В этом примере мы используем относительные пути
stage('Trigger Branch Build') {
steps {
script {
echo "Triggering job for branch ${env.BRANCH_NAME}"
BRANCH_TO_TAG=env.BRANCH_NAME.replace("/","%2F")
build job: "../my-relative-job/${BRANCH_TO_TAG}", wait: false
}
}
}
Запустить другую работу, используя номер сборки в качестве параметра
build job: 'your-job-name',
parameters: [
string(name: 'passed_build_number_param', value: String.valueOf(BUILD_NUMBER)),
string(name: 'complex_param', value: 'prefix-' + String.valueOf(BUILD_NUMBER))
]
Запускать много рабочих мест параллельно
Источник: https://jenkins.io/blog/2017/01/19/converting-conditional-to-pipeline/
Больше информации о Parallel здесь: https://jenkins.io/doc/book/pipeline/syntax/#parallel
stage ('Trigger Builds In Parallel') {
steps {
// Freestyle build trigger calls a list of jobs
// Pipeline build() step only calls one job
// To run all three jobs in parallel, we use "parallel" step
// https://jenkins.io/doc/pipeline/examples/#jobs-in-parallel
parallel (
linux: {
build job: 'full-build-linux', parameters: [string(name: 'GIT_BRANCH_NAME', value: env.BRANCH_NAME)]
},
mac: {
build job: 'full-build-mac', parameters: [string(name: 'GIT_BRANCH_NAME', value: env.BRANCH_NAME)]
},
windows: {
build job: 'full-build-windows', parameters: [string(name: 'GIT_BRANCH_NAME', value: env.BRANCH_NAME)]
},
failFast: false)
}
}
Или в качестве альтернативы:
stage('Build A and B') {
failFast true
parallel {
stage('Build A') {
steps {
build job: "/project/A/${env.BRANCH}", wait: true
}
}
stage('Build B') {
steps {
build job: "/project/B/${env.BRANCH}", wait: true
}
}
}
}
Ответ 5
Используйте плагин для сборки заданий для этой задачи, чтобы запускать другие задания из файла jenkins.
Вы можете добавить разнообразную логику к своему исполнению, такую как параллель, параметры узла и агентов и шаги для запуска внешних заданий. Для этого я привел несколько легко читаемых примеров поваренной книги.
1. Пример запуска внешнего задания из файла jenkins с условным примером:
if (env.BRANCH_NAME == 'master') {
build job:'exactJobName' , parameters:[
string(name: 'keyNameOfParam1',value: 'valueOfParam1')
booleanParam(name: 'keyNameOfParam2',value:'valueOfParam2')
]
}
2. Пример запуска нескольких заданий из файла jenkins с примером условия:
def jobs =[
'job1Title'{
if (env.BRANCH_NAME == 'master') {
build job:'exactJobName' , parameters:[
string(name: 'keyNameOfParam1',value: 'valueNameOfParam1')
booleanParam(name: 'keyNameOfParam2',value:'valueNameOfParam2')
]
}
},
'job2Title'{
if (env.GIT_COMMIT == 'someCommitHashToPerformAdditionalTest') {
build job:'exactJobName' , parameters:[
string(name: 'keyNameOfParam3',value: 'valueOfParam3')
booleanParam(name: 'keyNameOfParam4',value:'valueNameOfParam4')
booleanParam(name: 'keyNameOfParam5',value:'valueNameOfParam5')
]
}
}