如何在gitlab-ci的image关键字中放置多个图像



我有两个工作build_binarybuild 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 rungolang是否正常

如果一切成功,你可以把它推送到你自己的帐户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

最新更新