GitLab CI:如何拉取特定的 docker 容器进行部署
GitLab CI: How to pull specific docker container for deployment
我正在 gitlab 中手动进行生产部署。我正在使用 docker 容器。
单击管道列表中的 'Play'-按钮应该进行部署。
但是如何获取所选容器的版本呢?做这个脚本总是试图拉取 latest
版本,这是不应该的。我想拉 'selected' 容器。
deploy_prod:
stage: deploy
script:
- docker pull $CI_REGISTRY_IMAGE # here selected version is missing
# ...
when: manual
environment:
name: productive
url: https://example.com
only:
- master
如您问题的评论中所述,只需使用您用于推送映像的相同脚本,即可在部署阶段将其拉取。
这是一个示例 pull.sh
脚本:
#!/bin/sh
args=("$@")
CI_REGISTRY_IMAGE=${args[0]}
PACKAGE_VERSION=$(cat package.json \
| grep version \
| head -1 \
| awk -F: '{ print }' \
| sed 's/[",]//g' \
| tr -d '[[:space:]]')
CONTAINER_RELEASE_IMAGE=$CI_REGISTRY_IMAGE\:$PACKAGE_VERSION
docker pull $CONTAINER_RELEASE_IMAGE
注意最后一行的 pull
而不是 push
。
然后像这样修改您的部署作业:
deploy_prod:
stage: deploy
script:
- ./pull.sh $CI_REGISTRY_IMAGE
# ...
when: manual
environment:
name: productive
url: https://example.com
only:
- master
我正在 gitlab 中手动进行生产部署。我正在使用 docker 容器。
单击管道列表中的 'Play'-按钮应该进行部署。
但是如何获取所选容器的版本呢?做这个脚本总是试图拉取 latest
版本,这是不应该的。我想拉 'selected' 容器。
deploy_prod:
stage: deploy
script:
- docker pull $CI_REGISTRY_IMAGE # here selected version is missing
# ...
when: manual
environment:
name: productive
url: https://example.com
only:
- master
如您问题的评论中所述,只需使用您用于推送映像的相同脚本,即可在部署阶段将其拉取。
这是一个示例 pull.sh
脚本:
#!/bin/sh
args=("$@")
CI_REGISTRY_IMAGE=${args[0]}
PACKAGE_VERSION=$(cat package.json \
| grep version \
| head -1 \
| awk -F: '{ print }' \
| sed 's/[",]//g' \
| tr -d '[[:space:]]')
CONTAINER_RELEASE_IMAGE=$CI_REGISTRY_IMAGE\:$PACKAGE_VERSION
docker pull $CONTAINER_RELEASE_IMAGE
注意最后一行的 pull
而不是 push
。
然后像这样修改您的部署作业:
deploy_prod:
stage: deploy
script:
- ./pull.sh $CI_REGISTRY_IMAGE
# ...
when: manual
environment:
name: productive
url: https://example.com
only:
- master