Тег изображения docker имени Drone с настройкой формата строки даты и времени с помощью drone.yml

#docker #continuous-integration #continuous-deployment #drone

#docker #непрерывная интеграция #непрерывное развертывание #drone.io

Вопрос:

У меня есть этот дрон.yml, который работает нормально и генерирует изображение docker. Я создаю изображение docker с 2 тегами.

  1. SHA фиксации в GitHub.
  2. Последние

Что я хочу сделать, так это добавить дату и время создания изображения в формате ГГГГ-ММ-DD_HH-ММ к 1-му тегу (SHA фиксации в GitHub).

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

  

Теги изображений в журналах сборки drone:

  • /usr/local/bin/ тег docker c692df4346acada797d9541135f37124b15d1183 nonprodazure/graph-base-api: 1600986079-c692df4346acada797d9541135f37124b15d1183

В журналах можно увидеть, что временная метка UNIX (1600986079) добавлена в имя тега docker image. Как я могу изменить значение $ {DRONE_BUILD_FINISHED} — метка времени Unix на формат строки DateTime, понятный для человека (ГГГГ-ММ-DD_HH-ММ)?

Ответ №1:

Это то, что мне нужно было сделать, чтобы получить дату / время в удобочитаемом формате, а не в формате 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
  

Ниже приведены 2 тега, созданные для изображения docker. Теперь второе имя тега содержит требуемый формат даты и времени.

введите описание изображения здесь

Решение:

  • Удалите теги на существующем шаге.
  • Добавлен новый шаг для создания тегов в файле .tags.

Если вам нужно обмениваться данными между родственными процессами (этапы конвейера), вам необходимо обмениваться этой информацией путем записи и чтения с диска. Плагин docker автоматически считывает теги из файла .tags. Невозможно создать переменную среды в одном процессе и прочитать эту переменную среды в процессе-двойнике.

Ссылки:

  1. использование пользовательских тегов для изображений docker.
  2. плагины / настройка docker несколько тегов с использованием файла .tags