我在本地安装了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
不知道问题是什么。
答案 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 -e
和set -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。您的里程可能会有所不同,但这足以满足我的目的,并且可以完全解决这两个问题。