如何使用Jenkins & the Pipeline Multibranch Plugin在分支之间拥有唯一的内部版本号

dgenwo3n  于 2022-12-17  发布在  Jenkins
关注(0)|答案(4)|浏览(239)

我们正在使用Jenkins管道多分支插件与蓝海。
通过阅读,我相信将项目的构建号与Jenkins运行联系起来是很常见的,因为这允许从安装的应用程序到CI系统,然后到源代码控制中的更改,再到促使更改的问题的可追溯性。
问题是,对于每个分支,运行号从0开始。对于具有多个分支的项目,似乎不可能保证唯一的内部版本号。

qlckcl4x

qlckcl4x1#

你可以从$GIT_BRANCH中获取Git分支名称,并将其添加到$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-是您要 * 保留 * 的字符。)

wi3ka0sx

wi3ka0sx2#

也许您不想使用唯一的(全局数字)内部版本号,而是尝试使用唯一的(全局)内部版本显示名称?
根据“管道语法:全局变量引用”currentBuild.displayName是可写属性。因此,您可以向构建号添加附加信息(以便使其全局唯一),并在后续工件/应用构建步骤中使用该字符串(以便将其合并到应用的版本输出中,以实现所需的可跟踪性),例如:

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

使用构建的计划或开始时间格式(currentBuild.timeInMillis)作为可读日期,或使用SCM修订版本可能也很有用,例如生成“20180119-091439-rev 149923”。
另见:

o3imoua4

o3imoua43#

一种方法是让一个作业从所有分支调用,并使用它的内部版本号。这个作业可以只是一个普通的管道作业,带有一个虚拟的Jenkinsfile,如echo“hello”。然后像这样调用它

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不会优化同时发生的构建以使用相同的“构建编号生成器”作业。

rdlzhqv9

rdlzhqv94#

您可以使用外部服务来管理项目的唯一内部版本号。这也有助于跨分支机构和CI服务器获取唯一内部版本号。https://www.nextbuildnumber.net/

相关问题