한 번은 내 프로젝트 배포를 자동화하는 것에 대해 생각해 본 적이 있습니다. gitlab.com에서는 이를 위한 모든 도구를 친절하게 제공하고 있으며, 물론 그것을 파악하고 작은 배포 스크립트를 작성하여 사용하기로 결정했습니다. 이 기사에서 저는 제 경험을 커뮤니티와 공유합니다.
#!/usr/bin/env sh
# Падаем сразу, если возникли какие-то ошибки
set -e
# Выводим, то , что делаем
set -v
#
DOCKER_COMPOSE_FILE=docker-compose.yml
# Куда деплоим
DEPLOY_HOST=185.241.52.28
# Путь для сертификатов клиента, то есть в нашем случае - gitlab-воркера
DOCKER_CERT_PATH=/root/.docker
# проверим, что в контейнере все имеется
docker info
docker-compose version
# создаем путь (сейчас работаем в клиенте - воркере gitlab'а)
mkdir $DOCKER_CERT_PATH
# изымаем содержимое переменных, при этом удаляем лишние символы добавленные при сохранении переменных.
echo "$CA_PEM" | tr -d 'r' > $DOCKER_CERT_PATH/ca.pem
echo "$CERT_PEM" | tr -d 'r' > $DOCKER_CERT_PATH/cert.pem
echo "$KEY_PEM" | tr -d 'r' > $DOCKER_CERT_PATH/key.pem
# на всякий случай даем только читать
chmod 400 $DOCKER_CERT_PATH/ca.pem
chmod 400 $DOCKER_CERT_PATH/cert.pem
chmod 400 $DOCKER_CERT_PATH/key.pem
# далее начинаем уже работать с удаленным docker-демоном. Собственно, сам деплой
export DOCKER_TLS_VERIFY=1
export DOCKER_HOST=tcp://$DEPLOY_HOST:2376
# проверим, что коннектится все успешно
docker-compose
-f $DOCKER_COMPOSE_FILE
ps
# логинимся в docker-регистри, тут можете указать свой "местный" регистри
docker login -u $DOCKER_USER -p $DOCKER_PASSWORD
docker-compose
-f $DOCKER_COMPOSE_FILE
pull app
# поднимаем приложение
docker-compose
-f $DOCKER_COMPOSE_FILE
up -d app
주요 문제는 gitlab CI/CD 변수에서 일반 형식의 인증서 내용을 "풀아웃"하는 것이었습니다. 원격 호스트에 대한 연결이 작동하지 않는 이유를 알 수 없습니다. 호스트에서 sudo journalctl -u docker log를 보니 핸드셰이크에 오류가 있습니다. 나는 일반적으로 변수에 저장되는 것을 살펴보기로 결정했습니다. 이를 위해 cat -A $DOCKER_CERT_PATH/key.pem을 볼 수 있습니다. 캐럿 문자 tr -d 'r' 제거를 추가하여 오류를 해결했습니다.