gitlab-ci.yml是否可以将其变量共享给ssh



我正试图通过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可以使用SSH连接到远程Docker守护程序。因此,无需复制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;"

最新更新