【问题标题】:How can I download a numbered build artifact from Jenkins using Ansible?如何使用 Ansible 从 Jenkins 下载编号构建工件?
【发布时间】:2016-09-13 15:17:23
【问题描述】:

我有一个 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 存储库,如果这是正确的做法,我也希望能在这个方向上提供一些指示。

【问题讨论】:

    标签: jenkins ansible artifactory devops


    【解决方案1】:

    您可以使用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"
    

    【讨论】:

      【解决方案2】:

      由于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
      

      【讨论】:

      • 康斯坦丁的例子要简单得多,但这仍然是一个好方法。
      • maven 和 artifactory 什么时候入局的?它如何解决不断变化的工件名称?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-31
      • 1970-01-01
      • 2015-10-04
      • 1970-01-01
      相关资源
      最近更新 更多