我有两个工作build_binary
和build deb
,我想把它们结合起来。但问题是它们都使用不同的images
。前者使用golang:latest
,后者使用ubuntu:20.04
,如下图所示:
gitlab-ci.yml
build_binary:
stage: build
image: golang:latest
rules:
- if: '$CI_COMMIT_TAG'
# tags:
# - docker-executor
artifacts:
untracked: true
script:
- echo "Some script"
build deb:
stage: deb-build
rules:
- if: '$CI_COMMIT_TAG'
# tags:
# - docker-executor
image: ubuntu:20.04
dependencies:
- build_binary
script:
- echo "Some script 2"
artifacts:
untracked: true
我试过这两种方法,但都不起作用。
build_binary:
stage: build
image: golang:latest ubuntu:20.04
和
build_binary:
stage: build
image: [golang:latest,ubuntu:20.04]
任何指示都会很有帮助。
这不是关于gitlab-ci
-第一手你应该了解什么是images
,什么容器(docker)在它的性质。
你不能神奇地把mixed image
变成ubuntu:20.04+golang:latest
。这是不可能从gitlab-ci
文件。
但是你可以创建your own IMAGE
你可以选择ubuntu:20.04的Dockerfile,在dockerhub https://hub.docker.com/_/ubuntu
然后你可以添加命令在这个操作系统中安装golang。在此之后,打开golang:latest Dockerfile并将其安装过程复制到ubuntu Dockerfile中,并进行必要的修改。
然后执行docker build -t my-super-ubuntu-and-golang
-参见手册
然后检查docker run
和golang
是否正常
如果一切成功,你可以把它推送到你自己的帐户dockerhub和gitlab-ci:
image: your-name/golang-ubuntu-20.04
...
建议使用
services
是非常不正确的-service
启动另一个映像并通过网络连接它,因此您可以运行postgres
,rabbit
和其他服务并在测试中使用它,例如:
image: alpine
services : [ rabbitmq ]
并不意味着rabbitmq will be started on alpine
——两者都将启动——本地主机名为rabbitmq
的alpine和rabbitmq的镜像,并且您的alpine可以连接到tcp://rabbitmq:5672
并使用它。这是另一种方法。
注:例如,您可以查看https://hub.docker.com/r/partlab/ubuntu-golang我认为这不是你真正想要的图像,但你可以看到如何制作混合ubuntu-golang图像
使用your.gitlab-ci中的image和services关键字。你可以定义一个使用多个Docker镜像的GitLab CI/CD作业。
例如,您可以使用以下配置来指定一个同时使用Golang映像和Ubuntu映像的作业:
build:
image: golang:latest
services:
- ubuntu:20.04
before_script:
- run some command using Ubuntu
script:
- go build
- run some other command using Ubuntu