docker - Drone - 使用 Drone.yml 自定义日期时间字符串格式命名 docker 图像标签

标签 docker continuous-integration continuous-deployment drone.io

我有这个 drrone.yml,它运行良好并生成一个 docker 镜像。我正在构建带有 2 个标签的 docker 镜像。

  1. GitHub 中提交的 SHA。
  2. 最新

我想要做的是将图像创建的日期和时间以 YYYY-MM-DD_HH-MM 的格式附加到第一个标签(GitHub 中提交的 SHA)。

---
name: api-graph-base
kind: pipeline
type: docker

steps:

  - name: push-azure-nonprod
    when:
      event:
        - push
        - pull_request
      branch:
        - master
    image: plugins/docker
    settings:
      username: abc
      password:
        from_secret: xyz
      repo: nonprodazure/graph-base-api
      build_args:
        - LOG_LEVEL=debug
      registry: nonprodregistry.azurecir.io
      custom_dns: [100.100.100.100, 99.99.99.99]
      tags:
        - '${DRONE_BUILD_FINISHED}-${DRONE_COMMIT}'
        - latest
      dockerfile: Dockerfile

无人机构建日志中的图像标签:

  • /usr/local/bin/docker tag c692df4346acada797d9541135f37124b15d1183 nonprodazure/graph-base-api:1600986079-c692df4346acada797d9541135f37124b15d1183

您可以在日志中看到 UNIX 时间戳 (1600986079) 附加在 docker 镜像标记名称中。如何将 ${DRONE_BUILD_FINISHED} - Unix 时间戳的值更改为 DateTime 人类可读的字符串格式 (YYYY-MM-DD_HH-MM)?

最佳答案

这就是我需要做的,以人类可读的格式而不是 UNIX 格式获取日期/时间。

---
name: api-graph-base
kind: pipeline
type: docker

steps:
  - name: send-tags-to-tags-file
    image: node
    when:
      event:
        - push
        - pull_request
    commands:
      - echo -n "$(date +'%Y-%m-%d_%H-%M')_${DRONE_COMMIT}, latest" > .tags

  - name: push-azure-nonprod
    when:
      event:
        - push
      branch:
        - master
    image: plugins/docker
    settings:
      username: abc
      password:
        from_secret: xyz
      repo: nonprodazure/graph-base-api
      build_args:
        - LOG_LEVEL=debug
      registry: nonprodregistry.azurecir.io
      custom_dns: [100.100.100.100, 99.99.99.99]
      dockerfile: Dockerfile

下面为 docker 镜像创建了 2 个标签。第二个标签名称现在包含所需的日期时间格式。

enter image description here

解决方案:

  • 删除现有步骤中的标签。
  • 添加了在 .tags 文件中生成标签的新步骤。

如果您需要在同级进程(管道步骤)之间共享数据,您需要通过写入和读取磁盘来共享此信息。 docker 插件将自动从 .tags 文件中读取标签。无法在一个进程中创建环境变量并在同级进程中读取该环境变量。

引用文献:

  1. using custom generated tags for docker images.
  2. plugins/docker configuration multiple tags using .tags file

关于docker - Drone - 使用 Drone.yml 自定义日期时间字符串格式命名 docker 图像标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64062210/

相关文章:

git - VSTS - 从一个存储库持续部署到两个独立的 Azure Web 应用程序

node.js - 持续部署单页应用程序?

docker - 构建错误。无法获取 http ://deb. debian.org/debian/dists/jessie-updates/main/binary-amd64/Packages

docker - 使用Docker和Docker Compose创建镜像

docker - 你能在 jib docker 镜像中安装命令行包吗?

php - Docker php—安装php扩展ssh2

git - 在 Git 预提交 Hook 中聚合和丑化 JavaScript

java - 如何使用 Jenkins CI 部署 Java EE 应用程序?

android - 通过 TeamCity 为 Android 持续集成。首选工具?

Windows VirtualBox 中的 Docker