开箱即用的Docker可以使用SSH连接到远程Docker守护程序。因此,无需复制
我正试图通过GitLab CI将我的Docker镜像部署到服务器。我在yml文件中设置了变量,并通过SSH连接到我的服务器。是否可以自动使用yml文件中的变量,或者我必须将它们逐一传递给SSH?
此外,我想知道是否有比我的方式更好的方式来部署它。
deploy:
image: alpine
variables:
#this may be overridden by parent pipeline, or it will be latest
my_nginx: registry.gitlab.com/myprofile/nginx:latest
before_script:
- apk add openssh-client
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add -
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
script:
- scp -o StrictHostKeyChecking=no docker-compose.yml $HOST:~
- >
ssh -o StrictHostKeyChecking=no $HOST "
echo "$CI_JOB_TOKEN" | docker login -u "$CI_REGISTRY_USER" $CI_REGISTRY --password-stdin;
cd ~;
my_nginx=$my_nginx
docker-compose pull;
docker-compose up -d --remove-orphans;
docker image prune;"
services:
nginx:
container_name: my-nginx
image: $my_nginx
restart: unless-stopped
ports:
- 80:80
docker-compose.yaml
或转发环境变量。
您只需要将DOCKER_HOST
变量设置为指向远程docker守护进程的SSH uri。
deploy:
image: alpine
variables:
#this may be overridden by parent pipeline, or it will be latest
my_nginx: registry.gitlab.com/myprofile/nginx:latest
DOCKER_HOST: ssh://$HOST # format is ssh://user@host
before_script:
- apk add openssh-client
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add -
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
script:
- echo "$CI_JOB_TOKEN" | docker login -u "$CI_REGISTRY_USER" $CI_REGISTRY --password-stdin;
docker-compose pull;
docker-compose up -d --remove-orphans;
docker image prune;"