Администратор или разработчик Code Stream может использовать триггер Docker в Code Stream. Триггер Docker запускает автономный конвейер непрерывного предоставления (CD) при создании или обновлении артефакта сборки. Триггер Docker запускает конвейер CD, который передает новый или обновленный артефакт в виде образа контейнера в репозиторий центра Docker. Конвейер CD может выполняться в рамках автоматизированной сборки.

Например, для непрерывного развертывания обновленного образа контейнера с помощью конвейера CD используйте триггер Docker. При проверке образа контейнера в реестре Docker веб-перехватчик в центре Docker отправляет уведомление об изменении образа в службу Code Stream. Это уведомление инициирует запуск конвейера непрерывного предоставления с обновленным образом контейнера и отправку образа в репозиторий центра Docker.

Для использования триггера Docker необходимо выполнить несколько шагов в Code Stream.

Табл. 1. Как использовать триггер Docker
Действия... Сведения о действии...

Создайте конечную точку реестра Docker.

Чтобы решение Code Stream могло запускать конвейер, необходима конечная точка реестра Docker. Если конечная точка не существует, можно выбрать параметр, который создаст ее при добавлении веб-перехватчика для триггера Docker.

Конечная точка реестра Docker включает в себя URL-адрес репозитория центра Docker.

Добавьте в конвейер входные параметры, которые автоматически добавляют параметры Docker во время работы конвейера.

Возможна вставка параметров Docker в конвейер. Параметры могут включать в себя имя владельца события Docker, образ, имя репозитория, пространство имен репозитория и тег.

В конвейер CD следует добавить входные параметры, которые веб-перехватчик Docker передает в конвейер до его запуска.

Создайте веб-перехватчик Docker.

При создании веб-перехватчика Docker в Code Stream создается соответствующий веб-перехватчик в центре Docker. Веб-перехватчик Docker в Code Stream подключается к центру Docker по URL-адресу, который указывается в веб-перехватчике.

Веб-перехватчики обмениваются данными друг с другом и запускают конвейер при создании или обновлении артефакта в центре Docker.

При обновлении или удалении веб-перехватчика Docker в Code Stream также обновляется или удаляется веб-перехватчик в центре Docker.

Добавьте и настройте в конвейере задачу Kubernetes.

При создании или обновлении артефакта в репозитории центра Docker запускается конвейер. Затем он развертывает артефакт через конвейер на узле Docker в кластере Kubernetes.

Добавьте в задачу локальное определение YAML.

Определение YAML, применяемое к задаче развертывания, содержит образ контейнера Docker. Если необходимо загрузить образ из частного репозитория, файл YAML должен содержать раздел с секретом конфигурации Docker. См. подраздел о непрерывном предоставлении в разделе Планирование собственной сборки по модели непрерывной интеграции и непрерывной доставки в Code Stream перед использованием смарт-шаблона конвейера.

При создании или обновлении артефакта в репозитории центра Docker веб-перехватчик в центре Docker отправляет уведомление веб-перехватчику в Code Stream, который запускает конвейер. Выполняются следующие действия:

  1. Центр Docker отправляет запрос POST на URL-адрес, указанный в веб-перехватчике.
  2. Code Stream запускает триггер Docker.
  3. Триггер Docker запускает конвейер CD.
  4. Конвейер Docker отправляет артефакт в репозиторий центра Docker.
  5. Code Stream запускает собственный веб-перехватчик Docker, который запускает конвейер CD, развертывающий артефакт на узле Docker.

В этом примере создаются конечная точка Docker и веб-перехватчик Docker в Code Stream, который развертывает приложение в кластере разработки Kubernetes. Эти шаги включают в себя пример кода для полезных данных, который Docker отправляет по URL-адресу в веб-перехватчике, используемый код API-интерфейса и код проверки подлинности с защищенным маркером.

Необходимые условия

  • Убедитесь, что в экземпляре Code Stream существует конвейер непрерывного предоставления (CD). Кроме того, убедитесь в наличии одной или нескольких задач Kubernetes, которые развертывают приложение. См. раздел Планирование сборки, интеграции и предоставления кода встроенными средствами в Code Stream.
  • Убедитесь, что у вас есть доступ к существующему кластеру Kubernetes, в котором конвейер CD может развернуть приложение для разработки.
  • Проверьте, являетесь ли вы участником проекта в Code Stream. Если нет, попросите администратора Code Stream добавить вас в проект в качестве участника. См. раздел Добавление проекта в Code Stream.

Процедура

  1. Создайте конечную точку реестра Docker.
    1. а. Щелкните Конечные точки.
    2. б. Щелкните Создать конечную точку.
    3. в. Начните вводить имя существующего проекта.
    4. г. Выберите тип Реестр Docker.
    5. д. Введите соответствующее имя.
    6. е. Выберите тип сервера Центр Docker.
    7. ё. Введите URL-адрес репозитория центра Docker.
    8. ж. Введите имя и пароль для доступа к репозиторию.
    При добавлении конечной точки реестра Docker необходимо принять сертификат, так как он может потребоваться конечной точке.
  2. В конвейере CD настройте входные свойства для автоматической вставки параметров Docker во время работы конвейера.
    При добавлении входных параметров для конвейера необходимо щелкнуть вкладку Входные данные и выбрать тип параметров, например Gerrit, Git или Docker.
  3. Создайте веб-перехватчик Docker.
    1. а. Нажмите Триггеры > Docker.
    2. б. Щелкните Новый веб-перехватчик для Docker.
    3. в. Выберите проект.
    4. г. Введите соответствующее имя.
    5. д. Выберите конечную точку реестра Docker.
      Если конечная точка еще не существует, щелкните Создать конечную точку и создайте ее.
    6. е. Выберите конвейер со вставленными параметрами Docker для запуска веб-перехватчика. См. раздел Шаг 2.
      Если конфигурация конвейера включает в себя настраиваемые входные параметры, в списке «Входные параметры» отображаются параметры и значения. Можно ввести значения для входных параметров, которые будут переданы в конвейер с событием триггера. Кроме того, можно оставить значения пустыми или использовать значения по умолчанию, если они заданы.

      Дополнительные сведения о параметрах на вкладке входных данных см. в разделе Планирование собственной сборки по модели непрерывной интеграции и предоставления в Code Stream перед добавлением задач вручную.

    7. ё. Введите маркер API-интерфейса.
      Маркер API-интерфейса CSP выполняет проверку подлинности для внешних соединений API-интерфейса с Code Stream. Чтобы получить маркер API-интерфейса, выполните следующие действия.
      1. Выберите Создать маркер.
      2. Введите адрес электронной почты, связанный с именем пользователя и паролем, а затем нажмите Создать.
        Созданный маркер действителен в течение шести месяцев. Он также называется маркером обновления.
        • Чтобы сохранить маркер в виде переменной для использования в будущем, щелкните Создать переменную, введите имя переменной и нажмите кнопку Сохранить.
        • Чтобы сохранить маркер как текстовое значение для использования в будущем, нажмите кнопку Копировать и вставьте маркер в текстовый файл для сохранения в локальной системе.
        Можно создать переменную и одновременно сохранить маркер в текстовом файле для дальнейшего использования.
      3. Нажмите кнопку Закрыть.
    8. ж. Введите образ сборки.
    9. з. Введите тег.
      При создании веб-перехватчика для триггера Docker необходимо предоставить маркер API-интерфейса, обеспечивающий проверку подлинности при соединениях внешнего API-интерфейса с Code Stream.
    10. и. Нажмите Сохранить.
      Открывается карточка веб-перехватчика с включенным веб-перехватчиком Docker. Если требуется выполнить пробную отправку в репозиторий центра Docker без запуска веб-перехватчика Docker и выполнения конвейера, щелкните Отключить.
  4. В конвейере CD настройте задачу развертывания Kubernetes.
    1. а. В свойствах задачи Kubernetes выберите кластер разработки Kubernetes.
    2. б. Выберите действие Создать.
    3. в. Выберите Локальное определение для источника полезных данных.
    4. г. Затем выберите локальный файл YAML.
      Например, центр Docker может отправить это локальное определение YAML в виде полезных данных на URL-адрес в веб-перехватчике:
      {
      "callback_url": "https://registry.hub.docker.com/u/svendowideit/testhook/hook/2141b5bi5i5b02bec211i4eeih0242eg11000a/",
      "push_data": {
      "images": [
      "27d47432a69bca5f2700e4dff7de0388ed65f9d3fb1ec645e2bc24c223dc1cc3",
      "51a9c7c1f8bb2fa19bcd09789a34e63f35abb80044bc10196e304f6634cc582c",
      "..."
      ],
      "pushed_at": 1.417566161e+09,
      "pusher": "trustedbuilder",
      "tag": "latest"
      },
      "repository": {
      "comment_count": 0,
      "date_created": 1.417494799e+09,
      "description": "",
      "dockerfile": "#\n# BUILD\u0009\u0009docker build -t svendowideit/apt-cacher .\n# RUN\u0009\u0009docker run -d -p 3142:3142 -name apt-cacher-run apt-cacher\n#\n# and then you can run containers with:\n# \u0009\u0009docker run -t -i -rm -e http_proxy http://192.168.1.2:3142/ debian bash\n#\nFROM\u0009\u0009ubuntu\n\n\nVOLUME\u0009\u0009[\/var/cache/apt-cacher-ng\]\nRUN\u0009\u0009apt-get update ; apt-get install -yq apt-cacher-ng\n\nEXPOSE \u0009\u00093142\nCMD\u0009\u0009chmod 777 /var/cache/apt-cacher-ng ; /etc/init.d/apt-cacher-ng start ; tail -f /var/log/apt-cacher-ng/*\n",
      "full_description": "Docker Hub based automated build from a GitHub repo",
      "is_official": false,
      "is_private": true,
      "is_trusted": true,
      "name": "testhook",
      "namespace": "svendowideit",
      "owner": "svendowideit",
      "repo_name": "svendowideit/testhook",
      "repo_url": "https://registry.hub.docker.com/u/svendowideit/testhook/",
      "star_count": 0,
      "status": "Active"
      }
      }
      В API-интерфейсе, который создает веб-перехватчик в центре Docker, используется следующая форма: https://cloud.docker.com/v2/repositories/%3CUSERNAME%3E/%3CREPOSITORY%3E/webhook_pipeline/
      Тело кода JSON выглядит следующим образом:
      {
      "name": "demo_webhook",
      "webhooks": [
      {
      "name": "demo_webhook",
      "hook_url": "http://www.google.com"
      }
      ]
      }
      Чтобы получать события с сервера центра Docker, в схеме проверки подлинности для веб-перехватчика Docker, созданного в Code Stream, используется механизм проверки подлинности с фильтрацией по разрешенному списку со случайным строковым маркером для веб-перехватчика. Он фильтрует события на основе защищенного маркера, который можно присоединить к hook_url.
      Code Stream может проверять любые запросы с сервера центра Docker, используя настроенный защищенный маркер. Например, hook_url = IP:Port/pipelines/api/docker-hub-webhooks?secureToken = "".
  5. Создайте артефакт Docker в репозитории центра Docker. Или обновите существующий артефакт.
  6. Убедитесь, что триггер сработал, и просмотрите действие, инициируемое веб-перехватчиком Docker, щелкнув Триггеры > Docker > Действие.
    На вкладке Docker Действие можно видеть, как веб-перехватчик Docker передает время, изображения, теги и т. д.
  7. Щелкнув Выполняемые элементы, можно наблюдать за работой конвейера.
    Во время работы конвейера отображается состояние «ВЫПОЛНЯЕТСЯ», а значки этапов показывают ход выполнения.
  8. Щелкните выполняющийся этап и просмотрите задачи в ходе работы конвейера.
    Если щелкнуть один из значков этапов, можно видеть состояние каждой задачи на данном этапе во время работы конвейера.

Результаты

Поздравляем! Настроен триггер Docker для непрерывного запуска конвейера непрерывного предоставления. Теперь конвейер может отправлять новые и обновленные артефакты Docker в репозиторий центра Docker.

Дальнейшие действия

Убедитесь, что новый или обновленный артефакт развернут на узле Docker в кластере разработки Kubernetes.