Что на самом деле делает сервис Lock в Azure Pipelines 'DockerCompose? - PullRequest
0 голосов
/ 05 апреля 2020

Я учусь использовать Azure Pipelines для CI / CD. Я прочитал официальный документ и обнаружил, что у задачи Docker Compose есть действие под названием Lock services. Я понятия не имею, что на самом деле делает это действие и что оно означает, блокируя изображения.

Может кто-нибудь объяснить мне или дать несколько примеров того, когда и как его использовать?

1 Ответ

1 голос
/ 06 апреля 2020

У нас есть опубликованный c исходный код этой задачи, поэтому вы можете проверить эту страницу , чтобы проанализировать, какое именно действие выполняет эта команда.

Для изображения есть 2 разных идентификатора: tag и digest. Теперь давайте предположим один сценарий:

В большинстве случаев помеченное изображение в реестре контейнеров изменяемое , поэтому при наличии соответствующих разрешений вы или любой пользователь можете обновить / отправить / удалить изображение с таким же тег к этому реестру. Однако , когда вы развертываете изображение в рабочей среде, вы не можете быть уверены, что изображение с одним указанным тегом c не было перезаписано, и вы хотите развернуть его.

В настоящее время лучшим выбором будет digest.

Поскольку digest - это SHA256 , рассчитанный по изображению и идентифицирующий его , уникально . Когда в вашем изображении появятся какие-либо изменения, будут также изменены соответствующие SHA256 value.


Объяснение этого действия:

Отметьте это строка кода (здесь определено ). Это рабочая логика c - считывает изображения, используемые в файле docker-compose.yml, извлекает изображения и генерирует для них дайджест. Затем автоматически создается новый файл docker-compose.yml, изображение которого будет указываться с помощью дайджеста в этом новом файле docker-compose.yml.


Sample :

Я использовал определение задачи:

- task: DockerCompose@0
  displayName: 'Lock services'
  inputs:
    containerregistrytype: 'Container Registry'
    dockerRegistryEndpoint: {service connection name}
    dockerComposeFile: 'Docker/docker-compose.yml'
    action: 'Lock services'
    removeBuildOptions: true

docker-compose.yml:

version: '3'
services:
  web:
    image: xxxx/testwebapp
    ports:
      - "1983:80"
  newsfeed:
    image: xxx/merlin
  redis:
    image: redis

См. Сборку log этой задачи:

enter image description here

И содержимое new docker-compose.yml, которое генерируется.

(перечислить их с помощью команды cat xxx) :

enter image description here


Теперь, когда Вы развертываете изображения в производство, просто используйте новый файл docker-compose.yml, задача которого была сгенерирована автоматически. Это может гарантировать, что развернутый образ является версией, которую вы создали в начале, даже если кто-то перезаписывает этот образ позже.

...