[英]Jenkins build from tag using Bitbucket Branch Source plugin
當我在bitbucket的master分支中創建一個標簽時,我想構建我的jenkins管道。 我有jenkins建立在主分支的提交,但我似乎無法建立標簽的創建。
這是我到目前為止:
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看到prod階段的工作(我為dev和master做)。 jenkins項目下有一個“標簽”部分,但它是空的。
當您簽出Git存儲庫時,您可以通過分支或標記簽出,但不能同時簽出兩者。 當Jenkins簽出分支時,它會將BRANCH_NAME變量設置為簽出分支的名稱; 在簽出代碼時,它會將TAG_NAME 和 BRANCH_NAME 設置為代碼的名稱。
文件說:
如果when指令包含多個條件,則所有子條件必須返回true才能執行該階段。
標記條件與TAG_NAME匹配,而分支條件與BRANCH_NAME匹配,因此它們都需要為true才能執行階段。 由於在標簽結帳時它們恰好相同,因此這種條件設置始終為false。
解決方案取決於您想要實現的目標。 如果您希望執行該階段,如果其中任何一個為真,則條件應為:
when {
anyOf {
branch 'master'
tag 'v*'
}
}
如果你只想運行v *標簽,我會完全放棄分支條件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.