【问题标题】:GitLab CI: How to pull specific docker container for deploymentGitLab CI:如何拉出特定的 docker 容器进行部署
【发布时间】:2017-04-08 22:45:36
【问题描述】:

我正在 gitlab 中手动进行生产部署。我正在使用码头集装箱。 单击管道列表中的“播放”按钮应该进行部署。 但是如何获取所选容器的版本?执行此脚本总是试图拉取latest 版本,这是不应该的。我想拉出“选定”的容器。

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

【问题讨论】:

  • 选中是什么意思?
  • 在我的管道列表中,有多个构建。当我手动进行部署时,我必须选择其中一个构建(通常是最新的)并单击播放按钮。所以应该部署这个构建。你明白我的意思吗?
  • 那么您是在管道中构建 docker 映像吗?使用与构建它们时完全相同的名称。
  • 在这里你可以看到我是如何构建这些 docker 镜像的:stackoverflow.com/questions/43165840/… 并且由于版本值存在拉取特定构建的问题
  • 更多关于 jq 的信息在这里:stedolan.github.io/jq

标签: docker continuous-integration gitlab gitlab-ci


【解决方案1】:

正如您问题的 cmets 中所述,只需使用您用于推送图像的相同脚本,在部署阶段拉取它。

这是一个示例 pull.sh 脚本:

#!/bin/sh
args=("$@")
CI_REGISTRY_IMAGE=${args[0]}

PACKAGE_VERSION=$(cat package.json \
| grep version \
  | head -1 \
  | awk -F: '{ print $2 }' \
  | 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 2019-12-14
    相关资源
    最近更新 更多