簡體   English   中英

Jenkins使用Bitbucket Branch Source插件從標簽構建

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM