#jenkins #jenkins-pipeline #bitbucket #jenkins-plugins
#Дженкинс #Дженкинс-конвейер #bitbucket #Дженкинс-плагины
Вопрос:
Я хотел бы создать свой конвейер jenkins, когда я создаю тег в главной ветке в bitbucket. У меня есть дженкинс, который строит на фиксации главной ветки, но, похоже, я не могу заставить его построить для создания тега.
Это то, что у меня есть до сих пор:
stage('Update DEV ECS') {
when { branch 'dev' }
steps {
script{
withAWS(region:'us-east-1') {
def outputs = cfnUpdate(stack: 'DEV-TARGETDB-SERVICE',
params:["ImageUrl=${env.FULL_ECR_URL}"],
keepParams:[
'EnvVarName1',
'EnvVarValue1',
'EnvVarName2',
'EnvVarValue2',
'EnvVarName3',
'EnvVarValue3',
'ContainerCpu',
'ContainerMemory',
'ContainerPort',
'DatabaseHost',
'DatabaseName',
'DatabasePassword',
'DatabaseUser',
'DesiredCount',
'HttpCode',
'HTTPSListener',
'Path',
'Priority',
'Role',
'TaskRole',
'ServiceName',
'StackName',
'DataDogAPIKey',
'TaskCpu',
'TaskMemory'
],
timeoutInMinutes:15,
pollInterval:1000)
}
}
}
}
stage('Update TEST ECS') {
when { branch 'master' }
steps {
script{
withAWS(region:'us-east-1') {
def outputs = cfnUpdate(stack: 'TEST-TARGETDB-SERVICE',
params:["ImageUrl=${env.FULL_ECR_URL}"],
keepParams:[
'EnvVarName1',
'EnvVarValue1',
'EnvVarName2',
'EnvVarValue2',
'EnvVarName3',
'EnvVarValue3',
'ContainerCpu',
'ContainerMemory',
'ContainerPort',
'DatabaseHost',
'DatabaseName',
'DatabasePassword',
'DatabaseUser',
'DesiredCount',
'HttpCode',
'HTTPSListener',
'Path',
'Priority',
'Role',
'TaskRole',
'ServiceName',
'StackName',
'DataDogAPIKey',
'TaskCpu',
'TaskMemory'
],
timeoutInMinutes:15,
pollInterval:1000)
}
}
}
}
stage('Update PROD ECS') {
when {
branch 'master'
tag 'v*'
}
steps {
script{
withAWS(region:'us-east-1') {
def outputs = cfnUpdate(stack: 'PROD-TARGETDB-SERVICE',
params:["ImageUrl=${env.FULL_ECR_URL}"],
keepParams:[
'EnvVarName1',
'EnvVarValue1',
'EnvVarName2',
'EnvVarValue2',
'EnvVarName3',
'EnvVarValue3',
'ContainerCpu',
'ContainerMemory',
'ContainerPort',
'DatabaseHost',
'DatabaseName',
'DatabasePassword',
'DatabaseUser',
'DesiredCount',
'HttpCode',
'HTTPSListener',
'Path',
'Priority',
'Role',
'TaskRole',
'ServiceName',
'StackName',
'DataDogAPIKey',
'TaskCpu',
'TaskMemory'
],
timeoutInMinutes:15,
pollInterval:1000)
}
}
}
}
Этапы разработки и разработки работают, но этап разработки не работает. Я даже не вижу работы в дженкинсе для стадии разработки (я делаю для разработчиков и мастеров). В проекте jenkins есть раздел «теги», но он пуст.
Комментарии:
1. Если вы используете многоотраслевой конвейер, добавили ли вы «Обнаружение тегов» в раздел «Поведение» конфигурации источников ветки?
Ответ №1:
Когда вы извлекаете репозиторий Git, вы выполняете проверку либо по ветке, либо по тегу, но не по обоим. Когда Дженкинс проверяет ветку, он устанавливает переменную BRANCH_NAME на имя извлеченной ветки; когда он проверяет тег, он устанавливает TAG_NAME и BRANCH_NAME на имя тега.
В документации говорится:
Если директива when содержит более одного условия, все дочерние условия должны возвращать true для выполнения этапа.
Условие тега соответствует TAG_NAME, а условие перехода соответствует BRANCH_NAME, поэтому они оба должны быть истинными для выполнения stage. Поскольку они совпадают в случае проверки тега, эта настройка условия всегда ложна.
Решение зависит от того, чего вы хотите достичь. Если вы хотите выполнить этап, если какой-либо из них имеет значение true, условие должно гласить:
when {
anyOf {
branch 'master'
tag 'v*'
}
}
Если вы просто хотите работать с тегами v *, я бы просто полностью отбросил условие ветки.