首页 > 解决方案 > jenkinsfile 自动检测 gitlab 分支

问题描述

这是我的场景,我在 gitlab 中有两个分支,“master”和 staging。

我需要整合 jenkinsfile 以便我可以将同一个文件用于 staging 和 master 分支,但需要为每个分支执行不同的操作集

我想要做的是,如果标签推送致力于暂存分支 jenkins 将构建 docker 文件,将其上传到 aws ecr 并在 aws ecs 暂存集群中启动一个新的 docker 实例,如果标签推送到 master 分支,它将将其部署到另一个实时集群中。

我使用了“JENKINS PIPELINE”项目并在 jenkinsfile 中编写了以下代码,但 env.BRANCH_NAME 始终返回空值。

if  (env.BRANCH_NAME == "staging") {


      def  serviceName       = ""
      def  taskFamily        = ""
      def  clusterName       = ""
      } else if  (env.BRANCH_NAME == "master") {

      def  serviceName       = ""
      def  taskFamily        = ""
      def  clusterName       = ""
      }

当使用“JENKINS MULTIBRANCH”管道项目时,它会扫描项目并自动识别所有分支,但似乎每个分支都有自己的 webhook。

我真的对 MULTIBRANCH JENKINS 感到困惑。我们应该在 gitlab 中配置 2 个不同的 webhook 吗?一个用于分期,另一个用于主控?当我们在 gitlab 中将 git 标签推送到暂存分支时,詹金斯会拉动并自动切换到暂存分支吗?

看起来当我们在 gitlab 中向 staging 分支推送标签时,jenkins 正在从 staging 分支中提取 jenkinsfile,但正在处理 master 分支中的文件。

有什么方法可以使用“JENKINS PIPELINE”项目而不是“MULTI BRANCH”?

标签: jenkinsgitlabjenkins-pipelineamazon-ecs

解决方案


您可以使用“等于”函数代替“==”运算符myStringVar.equals(<someOtherValue>)

你的情况看起来像这样: -

if  (env.BRANCH_NAME.equals('staging')) {
  def  serviceName       = ""
  def  taskFamily        = ""
  def  clusterName       = ""
  } else if  (env.BRANCH_NAME.equals('master')) {
  def  serviceName       = ""
  def  taskFamily        = ""
  def  clusterName       = ""
  }

Ans 变量env.BRANCH_NAME将在多分支管道的情况下可用。


推荐阅读