繁体   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