Создайте представление сборки конвейера на основе задания конвейера с помощью подключаемого модуля Job DSL в Jenkins
Поскольку в Jenkins Pipeline есть ограничение, что вы не можете добавить шаг ручной сборки без зависания сборки (см., Например, этот вопрос о стекопереработке). Я экспериментирую с комбинацией Jenkins Pipeline и Build Pipeline Plugin с использованием плагина Job DSL.
Мой план состоял в том, чтобы создать сценарий Job DSL, который сначала выполняет конвейер Jenkins (определенный в Jenkinsfile
), а затем создайте последующее задание, которое развертывается в производство (это шаг вручную). Я создал этот сценарий Job DSL в качестве теста:
pipelineJob("${REPO_NAME} jobs") {
logRotator(-1, 10)
def repo = "https://path-to-repo/${REPO_NAME}.git"
triggers {
scm('* * * * *')
}
description("Pipeline for $repo")
definition {
cpsScm {
scm {
git {
remote { url(repo) }
branches('master')
scriptPath('Jenkinsfile')
extensions { } // required as otherwise it may try to tag the repo, which you may not want
}
}
}
}
publishers {
buildPipelineTrigger("${REPO_NAME} deploy to prod") {
parameters {
currentBuild()
}
}
}
}
freeStyleJob("${REPO_NAME} deploy to prod") {
}
buildPipelineView("$REPO_NAME Build Pipeline") {
selectedJob("${REPO_NAME} jobs")
}
где REPO_NAME
определяется как переменная окружения. Jenkinsfile
выглядит так:
node {
stage('build'){
echo "building"
}
stage('run tests'){
echo "running tests"
}
stage('package Docker'){
echo "packaging"
}
stage('Deploy to Test'){
echo "Deploying to Test"
}
}
Проблема в том, что selectedJob
указывает на "${REPO_NAME} jobs"
который не является допустимым параметром "Начальное задание" в представлении "Построить плагин конвейера" (его также нельзя выбрать вручную).
Есть ли обходной путь для этого? Т.е. как я могу использовать конвейер Jenkins в качестве "Начального задания" для плагина Build Pipeline?
1 ответ
Из документации на
yourDomain.com/plugin/job-dsl/api-viewer/index.html#method/javaposse.jobdsl.dsl.views.NestedViewsContext.envDashboardView
Он показывает, что buildPipelineView может использоваться только в блоке View, который находится внутри блока Folder.
Folder {
View {
buildPipelineView {
}
}
}