Я пытаюсь выполнить несколько строк сценария, чтобы получить новейший образ docker, а затем воссоздать контейнер на машине linux, которая привязана к azure DevOps, используя группу развертывания
Сценарий, который я пытаюсь выполнить:
echo "stopping container"
docker stop brokerfrontend_prod
echo "removing container"
docker rm brokerfrontend_prod
echo "downloading latest version of container"
docker pull jccontainer.azurecr.io/brokerfrontend
echo "starting container in newest version"
docker run --restart always -d -p 80:80 --name brokerfrontend_prod jccontainer.azurecr.io/brokerfrontend
При выполнении строк сценариев одну за другой через S SH они выполняются нормально. с помощью «whoami» я проверил, что пользователь, выполняющий сценарий через DevOps, совпадает с пользователем, который я использую при тестировании вручную.
Первый подход: использование «сценария командной строки»
все работает, но "тяга", которая существует с этой ошибкой:
https://jccontainer.azurecr.io/v2/brokerfrontend/manifests/latest: unauthorized: требуется аутентификация
Итак, вопрос 1 здесь: когда его выполняет тот же пользователь, что и при тестировании вручную, почему я не вошел в контейнер docker? И как мне войти в систему с помощью команд cmd?
- Начать РЕДАКТИРОВАТЬ ответ на этот вопрос - создать файл с паролем на машине linux, а затем сделать следующее: https://docs.docker.com/engine/reference/commandline/login/#provide -a-password-using-stdin
Так работает. Я все еще надеюсь, что у кого-то есть ответ на проблему «update_ docker. sh» --- Конец EDIT
Подход 2: я загружаю артефакт сборки с именем «update_ docker. sh» к аппарату linux. Эта часть работает.
Этот yaml используется для выполнения скрипта:
steps:
- task: Bash@3
displayName: 'Bash Script'
inputs:
targetType: filePath
filePath: './$(System.DefaultWorkingDirectory)/_BrokerFrontend publish docker/drop/update_docker.sh'
(Примечание: «update_ docker. sh» содержит тот же скрипт, что и показанный выше)
Он находит и выполняет файл сценария нормально, но теперь docker, похоже, не находит свои собственные контейнеры, это результат выпуска:
2020-06-17T12:08:58.6612091Z ##[section]Starting: Bash Script
2020-06-17T12:08:58.6615922Z ==============================================================================
2020-06-17T12:08:58.6616135Z Task : Bash
2020-06-17T12:08:58.6616296Z Description : Run a Bash script on macOS, Linux, or Windows
2020-06-17T12:08:58.6616460Z Version : 3.163.3
2020-06-17T12:08:58.6616596Z Author : Microsoft Corporation
2020-06-17T12:08:58.6616792Z Help : https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/bash
2020-06-17T12:08:58.6617018Z ==============================================================================
2020-06-17T12:08:58.7529325Z Generating script.
2020-06-17T12:08:58.7557883Z ##[warning]Executable bit is not set on target script, sourcing instead of executing. More info at https://github.com/Microsoft/azure-pipelines-tasks/blob/master/docs/bashnote.md
2020-06-17T12:08:58.7565197Z Formatted command: . '/home/jens/azagent/_work/r1/a/_BrokerFrontend publish docker/drop/update_docker.sh'
2020-06-17T12:08:58.7578128Z ========================== Starting Command Output ===========================
2020-06-17T12:08:58.7604032Z [command]/usr/bin/bash --noprofile --norc /home/jens/azagent/_work/_temp/7432c884-91ba-4211-9f0a-1dc8bccc1cc8.sh
2020-06-17T12:08:58.7648299Z /home/jens/azagent/_work/r1/a/_BrokerFrontend publish docker/drop/update_docker.sh: line 1: echo: command not found
2020-06-17T12:08:58.7652597Z stopping container
2020-06-17T12:08:58.7868756Z Error response from daemon: No such container: brokerfrontend_prod
2020-06-17T12:08:58.7881494Z removing container
2020-06-17T12:08:58.8101111Z Error: No such container: brokerfrontend_prod
2020-06-17T12:08:58.8114364Z downloading latest version of container
2020-06-17T12:08:58.8335633Z invalid reference format
2020-06-17T12:08:58.8348502Z starting container in newest version
2020-06-17T12:08:58.8585902Z docker: Error response from daemon: Conflict. The container name "/brokerfrontend_prod" is already in use by container "8bb19349fc1e45c5d8c8bd551ea59d18521b5ca491808e1b6b588d75c06e7e3d". You have to remove (or rename) that container to be able to reuse that name.
2020-06-17T12:08:58.8588270Z See 'docker run --help'.
2020-06-17T12:08:58.8614705Z
2020-06-17T12:08:58.8635224Z ##[error]Bash exited with code '125'.
2020-06-17T12:08:58.8661489Z ##[section]Finishing: Bash Script
(также первая строка всегда терпит неудачу, некоторая проблема с кодировкой между windows и linux. Остальные строки кажутся в порядке)
Здесь мы сначала видим «Нет такого контейнера: brokerfrontend_prod», но затем в конце он говорит: « / brokerfrontend_prod 'уже используется контейнером ". Я не понимаю, почему он не найдет контейнер, а затем скажет, что имя, включающее прямой sla sh, будет существовать, в то время как тот же сценарий отлично работает вручную и с «cmd» вместо «bash».
Вопрос №2: что может быть не так с задачей «bash»? Нужно ли форматировать файл по-другому?