jenkinsfile自动检测gitlab分支

时间:2019-04-01 17:56:23

标签: jenkins gitlab jenkins-pipeline amazon-ecs

这是我的情况,我在gitlab中有两个分支:“ master”和暂存。

我需要合并jenkinsfile,以便可以将相同的文件用于登台分支和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。

我真的对MULTIJRANCH JENKINS感到困惑。我们应该在gitlab中配置2个不同的webhook吗?一个用于登台,另一个用于大师?当我们将git标签推送到gitlab中的登台分支时,jenkins是否会拉动并自动切换到登台分支?

当我们将标签推入gitlab中的登台分支时,jenkins看起来是从登台分支中提取jenkinsfile,但在master分支中处理文件。

有什么方法可以使用“ JENKINS PIPELINE”项目代替“ MULTI BRANCH”?

2 个答案:

答案 0 :(得分:0)

在GitLab上好像不是env.BRANCH_NAME,而是CI_COMMIT_REF_NAME

https://docs.gitlab.com/ee/ci/variables/#predefined-environment-variables

我用来验证Jenkinsfile中的环境变量的一个技巧是运行一个shell脚本命令来显示您的环境。例如sh printenv(假设您的Jenkins构建代理基于Linux)

答案 1 :(得分:0)

您可以使用“等于”功能代替“ ==“运算符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       = ""
  }

在多分支管道中,变量env.BRANCH_NAME可用。