【问题标题】:Drone CI get and use build metadataDrone CI 获取和使用构建元数据
【发布时间】:2017-09-06 00:51:51
【问题描述】:

我在自托管系统中使用 Drone CI (0.7)。它已连接到 GitLab 和我的私人注册表并且运行良好!

但是,我想对 .drone.yml 文件做更多的事情。尤其是在将图像发布到注册表时。

文档显示了如何执行substitution,但没有解释如何设置这些变量。以下是文档中的示例:

pipeline:
  docker:
    image: plugins/docker
+   tags: ${DRONE_TAG}

这正是我想做的。在 repo(在发布分支上)创建一个 git 标签,并让该标签成为我的 Docker 映像的标签。

我试过git tag -a v1.0 -m "Initial release" 然后git push origin v1.0。当我为存储库设置 Tag Hooks 时,Drone CI 构建开始,但是当构建完成并将图像发布到注册表时,标签设置为 latest。推送常规代码更改提交时也会发生这种情况。

这是需要使用 CLI 完成的事情,还是我的 .drone.yml 文件中缺少某些内容(发布在下面)?它看起来像我需要设置的环境变量,但在提交代码以开始构建之前必须设置它(我假设)似乎很奇怪......

感谢您的任何帮助!

pipeline:
  build:
    image: node:latest
    commands:
      - npm install
      - npm test
  docker:
    image: plugins/docker
    repo: private.registry.com/tester
    registry: private.registry.com
    secrets: [ docker_username, docker_password ]
    tags: ${DRONE_TAG}
    when:
      branch: release

【问题讨论】:

    标签: drone.io


    【解决方案1】:

    实际上,您的docker 步骤仅在您将新提交推送到分支release 时才会触发,您应该使用标记事件。

    你应该有一些类似的配置

    tags:
      - latest
      - ${DRONE_TAG##v}
    when:
      event: tag
    

    注意 ${DRONE_TAG##v} 将去除前缀 v,因为您将标签命名为 v1.0,drone 会将其解析为

    tags:
      - latest
      - 1.0
    when:
      event: tag
    

    【讨论】:

    • 酷!但是谁能解释为什么##v 可以去掉前缀?
    • @SiruiZhuang 在这里查看文档docs.drone.io/substitution,实际上它可以应用于任何环境变量,这取决于您的特定用例
    • @jhernandez 谢谢!
    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 2022-08-05
    • 1970-01-01
    • 2013-02-26
    相关资源
    最近更新 更多