如何使用Jenkins和Pipeline Multibranch插件在分支上拥有唯一的构建号

pin*_*ngu 9 build jenkins jenkins-plugins jenkins-pipeline jenkins-blueocean

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

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

问题是对于每个分支,运行编号从0开始.对于具有多个分支的项目,似乎不可能保证唯一的编号.

Rei*_*der 5

也许您可能想尝试使用唯一的(全局)构建显示名称,而不是唯一的(全局数字)构建号?

根据“管道语法:全局变量引用”currentBuild.displayName是一个可写属性。因此,您可以向内部版本号添加附加信息(以便使其全局唯一),并在后续工件/应用程序构建步骤中使用该字符串(将其合并到应用程序的版本输出中以实现所需的可追溯性),例如:

currentBuild.displayName = "${env.BRANCH_NAME}-${currentBuild.id}"
Run Code Online (Sandbox Code Playgroud)

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

也可以看看:

  • 如果您需要使用 Integer 作为构建号的顺序构建并且您使用多分支管道(例如 Fabric Beta Android 构建),则这将不起作用。提交次数也不是选项。我还不知道一个干净的解决方案,也在研究一个。 (7认同)

Sil*_*own 5

您可以从中获取 Git 分支名称$GIT_BRANCH并将其添加到$BUILD_NUMBER以创建跨分支唯一的 ID(只要您的公司不做类似让自己被大公司接管的事情,该大公司将您迁移到另一个 Jenkins 服务器并重置所有内部版本号:为了防止出现这种情况,您可能需要使用$BUILD_URL)。

只有 snag$GIT_BRANCH包含该/字符,以及您在命名分支时使用的任何字符,这些在您需要 ID 的所有地方可能允许也可能不允许。($BUILD_URL也将包含像:/这样的字符)如果这是一个问题,一种解决方法是删除不需要的字符tr

export MY_ID=$(echo $GIT_BRANCH-$BUILD_NUMBER | tr -dc [A-Za-z0-9-])
Run Code Online (Sandbox Code Playgroud)

-dc手段删除这些字符的补充,因此A-Za-z0-9-你想的字符保持)。