如何基于自定义标签触发构建,以及在构建之前验证要构建的代码

时间:2018-10-25 11:09:41

标签: git jenkins

我希望根据提交自定义标签(例如“ RNX”)来触发构建 但是标签将确定要构建代码的哪一部分。 该标记对应于具有多个配置文件夹的文件夹中的特定配置,但是我只想一次构建一个。

每个配置文件夹都包含一个具有唯一标签名称的文件。 每个文件夹也都有自己的gradle文件。

我的想法是遍历配置文件夹并比较tag.txt文件的内容(持有唯一的标签名称),并在找到匹配项时执行gradle。 能做到吗 如果可能的话,我至少需要一个类似的东西,谢谢:)

3 个答案:

答案 0 :(得分:0)

您可以设置一个Webhook以便建立在标签上,然后可以将其放入Jenkinsfile中,并使用此参数“ tag”来运行所需的任何内容

sh "/${tag}/myconfig.sh"

答案 1 :(得分:0)

我是通过在接收后钩子上捕获标签并检查标签名称是否以'STG'开头来实现的。如果是这样,我将其视为登台标签,并触发CI作业(该作业将进行构建,测试,合并,推送等)

Gitlab接收后挂钩:

#!/bin/sh 
jenkins_job="CIJOB"
group="DEV"
project="myproj"
logfile="hook.log"

while read oldrev newrev refname
do
  echo "================================================" >> $logfile
  date                                                    >> $logfile
  echo "custom hook: running by pushing to $project.git " >> $logfile
  echo "oldrev: $oldrev"                                  >> $logfile
  echo "newrev: $newrev"                                  >> $logfile
  echo "refname: $refname"                                >> $logfile

  # check if branch/tag pushed
  unset branch
  unset tag

  # POSIX style 'if contains'
  if [ "${refname#*refs/heads}" != "$refname" ]; then
    branch=$(echo $refname | cut -d'/' -f3)
    echo "branch pushed: $branch"                         >> $logfile
  else 
    tag=$(echo $refname | cut -d'/' -f3)
    echo "tag pushed: $tag"                               >> $logfile
  fi

  isStagingTag=$(echo $tag | grep "^STG-")
  if [ "X" != "X$isStagingTag" ] ; then
    echo "${tag} tag pushed, running CI"                   >> $logfile
    curl -X GET "http://user:pass@jenkins:8080/job/$jenkins_job/buildWithParameters?token=$jenkins_job&REPO=$project&REF=$refname&TAG=$tag"
  fi
done

Jenkins Job(管道):

#!groovy
node('slave7') {
  stage {
    // strip the 'STG-' prefix from tag name 
    TAG = TAG.substring(TAG.indexOf('-')+1)

    // here u can implement your logic using groovy
    println TAG

    // or POSIX shell
    sh """
      echo ${TAG}
    """
  }
}

答案 2 :(得分:0)

如果您使用的是GitLab和GitLab Plugin,则可以使用gitlabActionTypegitlabTargetBranch环境变量的值。

当您按下标签时,gitlabActionType的值将是TAG_PUSH,而gitlabTargetBranch的值将是被按下的标签。

因此,要构建特定标签,您可以执行以下操作:

if (env.gitlabActionType == 'TAG_PUSH') {
    sh "${env.gitlabTargetBranch.split('/').last()}/build.sh"
}

或者:

if (env.gitlabActionType == 'TAG_PUSH') {
    dir("${env.gitlabTargetBranch.split('/').last()}") {
        sh "./build.sh"
    }
}

此外,您可以过滤哪些标签将启动构建:More info in the official doc