gitlab-ci.yml 可以将其变量共享给 ssh 吗?
can gitlab-ci.yml share its variables to 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;"
我正在尝试通过 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;"