如何为跑步者设置 GitLab CE CI 用户 docker 图片

How to setup GitLab CE CI to user docker images for runners

我已经尝试了好几天让 运行ner 在 docker 容器上工作。我有一个安装了 GitLab、gitlab-运行ner 和 docker 的 Debian 运行ning 系统。我想使用 docker 作为我的 运行 用户的容器,因为 shell 执行者正在我的 CI 机器上安装所有东西...

到目前为止我所做的:我按照 GitLab CE 文档中的描述安装了 docker 和 运行 这个命令:

gitlab-runner register -n \
  --url DOMAIN \
  --registration-token TOKEN \
  --executor docker \
  --description "docker-builder" \
  --docker-image "gliderlabs/alpine" \
  --docker-privileged

然后我用这个 .gitlab-ci-yml

创建了一个测试仓库来查看它是否正常工作
variables:
  # GIT_STRATEGY: fetch # re-uses the project workspace
  GIT_CHECKOUT: "false" # don't checkout the working copy to a revision related to the CI pipeline
  GIT_DEPTH: "3"

cache:
  paths:
    - node_modules/

stages:
  - deploy

before_script:
  - apt-get update
  - apt-get install -y -qq sshpass
  - ls -la

# ======================= Jobs=======================
# Teporaly disable jobs by adding a . (dot) before the job name

ftp-upload:
  stage: deploy
  # environment: Production
  except: 
    - testing
  script:
    - rm ./package-lock.json
    - npm install
    - ls -la
    - sshpass -V
    - export SSHPASS=$PASSWORD
    - sshpass -e scp -o stricthostkeychecking=no -r . $USERNAME@$HOST:/Test
  only:
    - master

# ===================== ./Jobs ======================

但我在 GitLab CI 控制台中收到错误消息:

Running with gitlab-runner 11.1.0 (081978aa)
  on docker-builder 5ce3c211
Using Docker executor with image gliderlabs/alpine ...
Pulling docker image gliderlabs/alpine ...
Using docker image sha256:74a78e860d7b39aa694197a70d4467019b611b80c21d886fcd1bfc04d2e767d4 for gliderlabs/alpine ...
Running on runner-5ce3c211-project-3-concurrent-0 via srvvgit001...
Cloning repository for master with git depth set to 3...
Cloning into '/builds/additive/test'...
Skipping Git checkout
Skipping Git submodules setup
Checking cache for default...
Successfully extracted cache
/bin/sh: eval: line 64: apt-get: not found
$ apt-get update
ERROR: Job failed: exit code 127

我对那些 docker 容器知之甚少,但它们似乎可以在不修改我的 CI 系统的情况下重新使用。在这里看起来它正在安装另一个 alpine image/container,但我不是说过 GitLab 运行ner 使用现有的吗?

希望有人可以更容易地向我解释这是如何工作的...我真的已经尝试了 google 给我的任何东西。

您正在使用的 Docker 图像是一个 Alpine 图像,它是一个最小的 Linux 分布。
Alpine Linux 没有使用 apt 进行包管理,而是 apk.

问题出在您 .gitlab-ci-ymlbefore_script 部分,您正在尝试 运行 apt.

要解决您的问题,请将 apt 的使用替换为 apk:

before_script:
  - apk update
  - apk add sshpass
...

阅读有关 Alpine Linux 包管理的更多信息 here