jenkins pipline+选择分支tag构建

jenkins pipline+选择分支tag构建

一.简介

一般选择分支构建,Git Parameter插件即可。这里是应用pipline的同时,可以选择分支进行构建。
file

Dynamic Parameter 可以动态的生成我们想要的一些参数,使用的语言是groovy。获取参数后,将变量传递到pipline中,用于脚本使用。

二.配置

1.在插件中找到 Dynamic Parameter Plug-in 进行安装

2.创建一个流水线项目

3.在参数化构建过程选择 Dynamic choice Parameter

git后面那段地址,就是项目的地址,不过只能获取一个项目的

def gettags = ("git ls-remote -h git@1.1.1.1:dd/xx.git").execute()
gettags.text.readLines().collect { it.split()[1].replaceAll('refs/heads/', '')  }.unique()

4.编写pipline脚本,这里只写变化的一段

stage 'checkout'

    dir('business_pay'){
          git branch: release_branch, credentialsId: 'jenkins', url: 'http://1.1.1.1/dd/xx.git'
    }

5.构建的时候,就会有选择提示了

三.配置tag

1.tag和上述配置一样,不过在Dynamic choice Parameter那里修改一下

def gettags = ("git ls-remote -t --refs git@1.1.1.1:dd/xx.git").execute()
gettags.text.readLines().collect { it.split()[1].replaceAll('refs/tags/', '')  }.unique()

2.然后pipeline里进行下修改,用git命令切换分支

stage 'checkout'
    dir('business_pay'){
          git branch: 'master', credentialsId: 'jenkins', url: 'http://1.1.1.1/dd/xx.git'
          sh "git checkout $release_tag"
    }

四.其它方法

def branchType = BRANCH_NAME.tokenize('/').last().trim()
isReleaseBranch = branchType == 'tmo_ps_gp15' || branchType == 'master'
branch = isReleaseBranch ? branchType : BRANCH_NAME.trim()
originalBuildNumber = BUILD_NUMBER
revision = "1.0.${BUILD_NUMBER}"

def setDisplayName(){
 if (BUILD_NUMBER != originalBuildNumber) {
  currentBuild.displayName = "${revision}-${branch} (resume ${BUILD_NUMBER})"
 } else if (isReleaseBranch){
  currentBuild.displayName = "${revision}-${branch}"
 }
}

BRANCH_NAME.tokenize('/').last().trim()
可以拿到你当前checkout下来是哪个branch, tokenize('/').last().trim() 意思就是以 / 切割 然后取最后一个元素并且去除该元素左右两边得空格,这样就可以拿到你checkout得branch

isReleaseBranch = branchType == 'tmo_ps_gp15' || branchType == 'master'
意思就是如果 你上面定义得branchType 等于tmo_ps_gp15 或者是master 分支得时候, isReleaseBranch 就等于呢个分支名且为true

branch = isReleaseBranch ? branchType : BRANCH_NAME.trim()
意思就是当isReleaseBranch为true得情况下,branch等于branchType ,如果为false就重新抓取你checkout得branch name

用于下面pipeline得判断而已
你可以根据你构建/部署情况而定
一个pipeline同一个代码可以作用于不同分支,不同分支得构建/部署不同得情况下,我都是在开头去判断得
后面你代码就可以直接 if(isReleaseBranch){xxxx}了
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论