如何使用Jenkins& amp; Pipeline Multibranch插件

时间:2018-01-16 13:14:42

标签: jenkins build jenkins-plugins jenkins-pipeline jenkins-blueocean

我们正在使用Jenkins Pipeline Multibranch Plugin和Blue Ocean。

通过我的阅读,我认为将项目的内部版本编号与Jenkins运行相结合是很常见的,因为这允许从已安装的应用程序到CI系统的可追溯性,然后到源代码控制的更改,然后到源代码控制的更改。促使改变的问题。

问题在于,对于每个分支,运行编号从0开始。对于具有多个分支的项目,似乎无法保证唯一的编号。

3 个答案:

答案 0 :(得分:3)

您可以get the Git branch name from $GIT_BRANCH并将其添加到$BUILD_NUMBER中,以使ID在各个分支机构之间都是唯一的(只要您的公司不做让自己迁移的大公司接管的事情)到另一个Jenkins服务器并重置所有内部版本号:为了防止那个,您可能要使用$BUILD_URL)。

只有$GIT_BRANCH字符包含/字符,以及您在命名分支时使用的任何字符,并且在您想要ID的所有位置都可能允许或不允许这些字符。 ($BUILD_URL还将包含:/之类的字符。)如果这是一个问题,一种解决方法是使用tr删除不需要的字符:

export MY_ID=$(echo $GIT_BRANCH-$BUILD_NUMBER | tr -dc [A-Za-z0-9-])

({-dc表示删除这些字符的补码,因此A-Za-z0-9-是您要输入的字符保持。)

答案 1 :(得分:2)

您可能希望尝试使用唯一(全局)构建显示名称而不是唯一(全局数字)构建号吗?

根据"管道语法:全局变量引用" currentBuild.displayName是可写属性。所以你可以例如向构建号添加其他信息(以使其全局唯一),并在后续工件/应用程序构建步骤中使用该字符串(将其合并到应用程序的版本输出中以获得所需的可跟踪性),例如:类似的东西:

currentBuild.displayName = "${env.BRANCH_NAME}-${currentBuild.id}"

使用构建的时间表或格式化的开始时间(currentBuild.timeInMillis)作为可读日期,或使用SCM修订版也可能有用,例如导致" 20180119-091439-rev149923"。

另见:

答案 2 :(得分:0)

一种方法是让所有分支都调用一个作业并使用它的内部版本号。该工作可以只是一个普通的管道工作,带有一个像 echo "hello" 这样的虚拟 Jenkinsfile。那么就这样称呼它

def job = build job: 'build number generator', quietPeriod: 0, parameters: [
        string(value: "${BRANCH_NAME}-${BUILD_NUMBER}", name: 'UID')  
]
def BNUMBER = job.getNumber().toString()
currentBuild.displayName = "build #"+BNUMBER
echo BNUMBER

不确定是否需要该 UID 参数,但它会强制所有对“内部版本号生成器”作业的调用都是唯一的,因此 Jenkins 不会优化同时发生的构建以使用相同的“内部版本号生成器”作业。