如何使用 Ansible 从 Jenkins 下载带编号的构建工件?
How can I download a numbered build artifact from Jenkins using Ansible?
我有一个 Jenkins 服务器,我想从中下载构建工件。问题在于作业的设置方式,构建工件包括作业编号,例如NightlyBuild-346.tar.bz2
。我们喜欢工作编号,因为它们可以很容易地了解特定构建的年龄。
这会出现问题,因为我不知道我正在下载的文件的准确名称——我只知道我想要最后一次成功的构建。我可以这样做:
- name: download build from CI
get_url:
url: "https://ci.contoso.com/job/NightlyBuild/lastSuccessfulBuild/artifact/NightlyBuild-345.tar.bz2"
dest: /tmp/NightlyBuild-345.tar.bz2
...但这会在 Jenkins 完成下一次夜间构建后中断,因为工件将变为 NightlyBuild-346.tar.bz2
。我想我在这里有几个选择:
- 尝试在
get_url
模块中使用通配符(不太确定)
- 从工作中下载所有工件(有几个)作为单个
archive.zip
并使用命令行和正则表达式魔术找到我关心的实际构建工件。 (可能会导致无法维护的混乱)
- 使用 REST API 获取上次成功作业的作业编号并形成完整的 URL。 (不确定 Ansible 是否允许我像那样即时设置变量)。
这些是我的选择吗?有没有更好的方法来解决这个问题?我想最终从 Jenkins 发布到一个 Artifactory 存储库,如果这是正确的做法,我也很感激在这个方向上的一些指示。
因为 Ansible 2.0
maven_artifact module 可用。该模块通过 version
参数支持 Maven 版本坐标。像这样使用它:
- maven_artifact:
group_id: junit
artifact_id: junit
dest: /tmp/junit-latest.jar
version: latest
repository_url: htttp://your-artifactory
您可以使用 uri 模块向 Jenkins 查询内部版本号:
- uri:
url: http://ci/job/NightlyBuild/lastSuccessfulBuild/buildNumber
return_content: yes
register: build_number_resp
- debug: msg="URL with build number http://ci/job/NightlyBuild/lastSuccessfulBuild/artifact/NightlyBuild-{{ build_number_resp.content }}.tar.bz2"
我有一个 Jenkins 服务器,我想从中下载构建工件。问题在于作业的设置方式,构建工件包括作业编号,例如NightlyBuild-346.tar.bz2
。我们喜欢工作编号,因为它们可以很容易地了解特定构建的年龄。
这会出现问题,因为我不知道我正在下载的文件的准确名称——我只知道我想要最后一次成功的构建。我可以这样做:
- name: download build from CI
get_url:
url: "https://ci.contoso.com/job/NightlyBuild/lastSuccessfulBuild/artifact/NightlyBuild-345.tar.bz2"
dest: /tmp/NightlyBuild-345.tar.bz2
...但这会在 Jenkins 完成下一次夜间构建后中断,因为工件将变为 NightlyBuild-346.tar.bz2
。我想我在这里有几个选择:
- 尝试在
get_url
模块中使用通配符(不太确定) - 从工作中下载所有工件(有几个)作为单个
archive.zip
并使用命令行和正则表达式魔术找到我关心的实际构建工件。 (可能会导致无法维护的混乱) - 使用 REST API 获取上次成功作业的作业编号并形成完整的 URL。 (不确定 Ansible 是否允许我像那样即时设置变量)。
这些是我的选择吗?有没有更好的方法来解决这个问题?我想最终从 Jenkins 发布到一个 Artifactory 存储库,如果这是正确的做法,我也很感激在这个方向上的一些指示。
因为 Ansible 2.0
maven_artifact module 可用。该模块通过 version
参数支持 Maven 版本坐标。像这样使用它:
- maven_artifact:
group_id: junit
artifact_id: junit
dest: /tmp/junit-latest.jar
version: latest
repository_url: htttp://your-artifactory
您可以使用 uri 模块向 Jenkins 查询内部版本号:
- uri:
url: http://ci/job/NightlyBuild/lastSuccessfulBuild/buildNumber
return_content: yes
register: build_number_resp
- debug: msg="URL with build number http://ci/job/NightlyBuild/lastSuccessfulBuild/artifact/NightlyBuild-{{ build_number_resp.content }}.tar.bz2"