Запускать несколько веток в jenkinsfile с другими условиями
У меня есть jenkinsfile, который содержит все шаги для сборки и развертывания новейшего кода на нашем промежуточном сервере. Теперь мне нужно изменить это, чтобы поддержать строительство для производства. Но сборка на производство может быть выполнена ТОЛЬКО вручную, и Jenkins не может запустить его автоматически.
Так что у меня есть две разные ветви: развивай и властвуй. Развивающая ветвь будет использоваться для постройки и подготовки к основной ветке. Для основной ветки мне нужно запустить конвейер вручную, а для развивающей ветви это может быть сделано полностью автоматически (в фиксированное время дня).
Чтобы упростить обновление моего кода до рабочей версии, я хочу иметь только один jenkinsfile, который является копией друг друга в разных ветвях (поэтому производственный jenkinsfile не может быть перезаписан с jenkinsfile of development branch после объединения).
Как я могу добиться этого в jenkinsfile?
Мой текущий jenkinsfile выглядит так:
pipeline {
agent any
stages {
stage('Build') {
steps {
bat 'mvn clean package -Dmaven.test.skip=true'
}
}
stage('Unit/Integration Test') {
parallel {
stage('All Tests') {
steps {
bat 'mvn verify'
}
}
}
}
stage('SonarQube analysis') {
when {
branch 'develop'
}
steps {
withSonarQubeEnv('SonarQube') {
bat 'mvn sonar:sonar'
}
}
}
stage("SonarQube Quality Gate") {
when {
branch 'develop'
}
steps {
timeout(time: 10, unit: 'MINUTES') {
script {
sleep 120
def qg = waitForQualityGate()
if (qg.status != 'OK') {
error "Pipeline aborted due to quality gate failure: ${qg.status}"
}
}
}
}
}
stage('Deploy Staging') {
parallel {
stage('Deploy APAC') {
when {
branch 'develop'
}
steps {
script {
build job: 'APAC Staging', parameters: []
}
}
}
stage('Deploy NASA') {
when {
branch 'develop'
}
steps {
script {
build job: 'NASA Staging', parameters: []
}
}
}
stage('Deploy EMEA') {
when {
branch 'develop'
}
steps {
script {
build job: 'EMEA Staging', parameters: []
}
}
}
}
}
}
post {
always {
cleanWs()
}
}
}
1 ответ
Я полагаю, что вы пытаетесь объединить файл Jenkinsfile для развертывания как для подготовки, так и для производства, чтобы упростить конвейер.
Сначала определите шаги / этапы для производственной среды и включите их, только если ветвь является главной.
if env.BRANCH_NAME == "master" {
EXECUTE STEPS
}
Этим вы можете добиться наличия одинакового Jenkinsfile как для основной, так и для развивающейся веток. Эти этапы / этапы не будут выполняться для других ветвей, кроме главной ветви.
Наряду с этим вы можете указать отправителя для продвижения в производственную среду, подобную этой.
input message: ''Deployment looks good?', ok: 'deploy to Production', submitter: 'USERID'
Надеюсь это поможет. Спасибо!