【问题标题】:Adding version number to Jenkins build artifact将版本号添加到 Jenkins 构建工件
【发布时间】:2022-01-06 21:31:44
【问题描述】:

我受命将 dotnet 构建从 Bamboo 迁移到 Jenkins。我使用了一个 Freestyle 作业来运行一个 powershell 脚本,使用 PowerShell 插件并成功构建了它。但是我需要将版本号添加到构建的工件中。 Bamboo 作业使用: ~\.dotnet\tools\dotnet-lambda.exe package -pl $fullDir -f "netcoreapp3.1" -o Payment.${bamboo.majorVersion}.${bamboo.minorVersion}.${bamboo.revisionVersion}.${bamboo.buildNumber}.zip

我进入 Jenkins 配置和全局属性中,创建了名为 - buildNumber、majorVersion、minorVersion 和 revisionVersion 的环境变量,并为其赋值,在 Freestyle 作业的 Build 部分中,我使用了: ~\.dotnet\tools\dotnet-lambda.exe package -pl $fullDir -f "netcoreapp3.1" -o Payment.${env.majorVersion}.${env.minorVersion}.${env.revisionVersion}.${env.buildNumber}.zip

但是构建的工件的名称是:Payment.....zip

  1. 如何传递变量值?
  2. 有没有办法自动增加 revisionNumber 和 buildNumber,而不是硬编码?

我对 Bamboo 和 Jenkins 都很陌生。任何帮助都会非常有帮助。

问候 拉梅什

【问题讨论】:

  • 你在哪里设置这些,全局或工作级别?您是否安装了Environment Injector?您可能还需要Build With Parameters,具体取决于增量。
  • @Ian W 我将它们设置在:管理 Jenkins > 配置系统 > 全局属性 > 环境变量 我没有环境注入器。现在已经安装了。无法弄清楚如何使用它来注入保存在环境变量中的变量。我尝试使用参数构建并将构建步骤更改为: ~\.dotnet\tools\dotnet-lambda.exe package -pl $fullDir -f "netcoreapp3.1" -o Payment.${params.majorVersion}.${params .minorVersion}.${params.revisionVersion}.${params.buildNumber}.zip 但最终以 Payment.....zip 再次结束

标签: jenkins jenkins-plugins


【解决方案1】:

就我个人而言,我不会在全局范围内配置这些东西,因为它们看起来是特定于工作的。尽管如此,

安装Environment Injector plugin。您现在有两个选项:
常规标签
[ X ] 为运行准备环境

构建环境标签
[ X ] 在构建过程中注入环境变量

设置“Properties Content”(这是一个环境变量)。

在您的 shell 步骤中(无需以 ${env....} 开头):

执行Shell步骤:

#!sh -
echo ${FOO}.${BUILD_NUMBER}
echo ${LABEL}

输出:

[EnvInject] - Loading node environment variables.
[EnvInject] - Preparing an environment for the build.
[EnvInject] - Keeping Jenkins system variables.
[EnvInject] - Keeping Jenkins build variables.
[EnvInject] - Injecting contributions.
Building in workspace C:\Users\jenkins\.jenkins\workspace\Foo
[EnvInject] - Executing scripts and injecting environment variables after the SCM step.
[EnvInject] - Injecting as environment variables the properties content 
FOO=bar

[EnvInject] - Variables injected successfully.
[Foo] $ sh - C:\Users\jenkins\AppData\Local\Temp\jenkins281351632631450693.sh
bar.8
Finished: SUCCESS

您还将在“执行 Shell”步骤的底部看到指向 ${JENKINS_URL}/env-vars.html 的链接,其中列出了可用于 shell 脚本的变量,其中包括 BUILD_NUMBER;用它代替buildNumber

该插件还支持Global and the Node level 的相同配置。 您还可以使用单独的构建步骤在作业步骤之间注入/更改变量(我们使用它来为 SonarQube 步骤设置特定的 JAVA_HOME)。

您还将在每个构建日志的左侧看到一个 [Environment variables] 按钮,以检查您运行的内容(见下文)。


如果您添加Build With Parameters plugin,则系统会提示您在触发作业时提供变量值,这些值可以在不重新配置作业的情况下以相同的方式使用(它不会记住它们,但您会看到每个构建日志左侧的 [Parameters] 按钮,用于检查您运行的内容。


Version Number plugin 可以提供更大的灵活性,比如说你想要 AutoIncrement 而“BUILD_NUMBER”选项限制太多,它提供了一个变量BUILDS_ALL_TIME,可以使用上面定义的变量或者硬编码的常量来聚合版本标签并可选择控制它的增量(例如:仅在成功构建时增量)。例如:

[ X ] 为运行准备环境
属性内容
FOO=bar

[ X ] 创建格式化版本号
环境变量名称 [BUILD-${FOO}.${BUILDS_ALL_TIME}]
跳过构建比 [ SUCCESS ]

执行Shell步骤:

#!sh -
echo ${FOO}.${BUILD_NUMBER}
echo ${LABEL}

输出:

[Foo] $ sh - C:\Users\jenkins\AppData\Local\Temp\jenkins4160554383847615506.sh
bar.10
BUILD-bar.2

【讨论】:

  • 非常感谢伊恩。这非常有帮助。我使用了版本号插件和 BUILDS_ALL_TIME 选项。
猜你喜欢
  • 2013-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-04
  • 1970-01-01
  • 1970-01-01
  • 2017-11-27
相关资源
最近更新 更多