gitlab-runner local - 没有这样的命令

时间:2018-02-23 10:44:21

标签: docker docker-compose gitlab

我在本地安装了gitlab-runner。

km@Karls-MBP ~ $ gitlab-runner --version
Version:      10.4.0
Git revision: 857480b6
Git branch:   10-4-stable
GO version:   go1.8.5
Built:        Mon, 22 Jan 2018 09:47:12 +0000
OS/Arch:      darwin/amd64

泊坞:

km@Karls-MBP ~ $ docker --version
Docker version 17.12.0-ce, build c97c6d6

.gitlab-ci.yml:

image: docker/compose:1.19.0

before_script:
  - echo wtf

test:
  script:
    - echo test

结果:

km@Karls-MBP ~ $ sudo gitlab-runner exec docker --docker-privileged test
WARNING: Since GitLab Runner 10.0 this command is marked as DEPRECATED and will be removed in one of upcoming releases 
WARNING: You most probably have uncommitted changes. 
WARNING: These changes will not be tested.         
Running with gitlab-runner 10.4.0 (857480b6)
  on  ()
Using Docker executor with image docker/compose:1.19.0 ...
Using docker image sha256:be4b46f2adbc8534c7f6738279ebedd6106969695f5e596079e89e815d375d9c for predefined container...
Pulling docker image docker/compose:1.19.0 ...
Using docker image docker/compose:1.19.0 ID=sha256:e06b58ce9de2ea3f11634e022ec814984601ea3a5180440c2c28d9217b713b30 for build container...
Running on runner--project-0-concurrent-0 via x.x.x...
Cloning repository...
Cloning into '/builds/project-0'...
done.
Checking out b5a262c9 as km/ref...
Skipping Git submodules setup
No such command: sh

Commands:
  build              Build or rebuild services
  bundle             Generate a Docker bundle from the Compose file
  config             Validate and view the Compose file
  create             Create services
  down               Stop and remove containers, networks, images, and volumes
  events             Receive real time events from containers
  exec               Execute a command in a running container
  help               Get help on a command
  images             List images
  kill               Kill containers
  logs               View output from containers
  pause              Pause services
  port               Print the public port for a port binding
  ps                 List containers
  pull               Pull service images
  push               Push service images
  restart            Restart services
  rm                 Remove stopped containers
  run                Run a one-off command
  scale              Set number of containers for a service
  start              Start services
  stop               Stop services
  top                Display the running processes
  unpause            Unpause services
  up                 Create and start containers
  version            Show the Docker-Compose version information

不知道问题是什么。

2 个答案:

答案 0 :(得分:7)

似乎docker/compose图像配置为docker-compose作为入口点。

您可以在 .gitlab-ci.yml 文件中override the default entrypoint泊坞窗/撰写图片:

image: 
  name: docker/compose:1.19.0
  entrypoint: [""]

before_script:
  - echo wtf

test:
  script:
    - echo test

答案 1 :(得分:0)

docker/compose映像具有命令docker-compose作为其入口点(直到1.24.x版),其用法与此类似(假定兼容的卷挂载):

docker run --rm -t docker/compose -f some-dir/compose-file.yml up

不幸的是,该功能使其与GitLab CI的Docker Runner中的使用不兼容。从理论上讲,您可以有一个这样的构造:

job-name:
    image: docker/compose:1.24.1
    script:
        - up
        - --build
        - --force-recreate

但是,GitLab Docker Runner假定入口点是/bin/bash-或至少具有同样的功能(许多Docker映像都以深思熟虑的方式使用外壳脚本,其中"$@"作为入口点的最后一行)-从您为脚本指定的数组元素会动态创建自己的临时shell脚本。它以set -eset -o pipeline之类的语句开头,并将在sh temporary-script.sh之类的语句中用作容器命令。这就是导致您收到意外错误消息的原因。

此行为最近是documented more clearly

  

Docker执行程序不会覆盖Docker映像的ENTRYPOINT。

     

这意味着,如果您的映像定义了ENTRYPOINT并且不允许使用CMD运行脚本,则该映像将无法与Docker执行器一起使用。

使用[""]覆盖入口点将允许在docker/docker-compose(版本1.25.x之前)中使用Docker Runner,但是GitLab即时创建的脚本不会作为进程运行1,因此该容器不会在脚本结尾处停止。示例:

job-name:
    image:
        name: docker/docker-compose
        entrypoint: [""]
    script:
        - docker-compose
        - up
        - --build
        - --force-recreate

在撰写本文时,docker/docker-compose的最新版本是1.25.0-rc2。您的里程可能会有所不同,但这足以满足我的目的,并且可以完全解决这两个问题。