Jan*_*uka 6 gitlab gitlab-ci gitlab-ci-runner
AWS我已经在现场实例上自动缩放了 gitlab-runner 。而且效果很好。
我在运行作业时遇到问题。下面是我的.gitlab-ci.yml,它有两个阶段。
stages:
- build
- dev1:build
build:
stage: build
script:
- docker build --rm -t broker-connect-dev1-${CI_COMMIT_SHORT_SHA} -f BrokerConnect/Dockerfile .
only:
- dev1/release
tags:
- itela-spot-runner
build-dev1:
stage: dev1:build
script:
- docker tag broker-connect-dev1-${CI_COMMIT_SHORT_SHA}:latest 19950818/broker-connect:${DEV1_TAG}
only:
- dev1/release
tags:
- itela-spot-runner
Run Code Online (Sandbox Code Playgroud)
问题来了,因为我使用竞价实例来运行作业,有时该build阶段发生在一个竞价实例中,而该dev1:build阶段发生在另一个竞价实例中。当这种情况发生时,dev1:build它会失败,因为它无法找到图像,broker-connect-dev1-${CI_COMMIT_SHORT_SHA}因为它是在单独的 Spot 实例中构建的。在 gitlab 或 gitlab-runner 中,有没有办法控制这种行为并在同一个现场实例中运行这两个build作业dev1:build?
控制哪些作业在哪些运行器上运行的最佳方法是使用标签。您可以为跑步者添加类似 的标签builds-images,然后在构建图像或需要使用上一步构建的图像的任何作业上,使用相同的标签。
例如:
stages:
- build
- dev1:build
build:
stage: build
script:
- docker build --rm -t broker-connect-dev1-${CI_COMMIT_SHORT_SHA} -f BrokerConnect/Dockerfile .
only:
- dev1/release
tags:
- itela-spot-runner
- builds-images
build-dev1:
stage: dev1:build
script:
- docker tag broker-connect-dev1-${CI_COMMIT_SHORT_SHA}:latest 19950818/broker-connect:${DEV1_TAG}
only:
- dev1/release
tags:
- itela-spot-runner
- builds-images
Run Code Online (Sandbox Code Playgroud)
现在您只需要有一个(或多个)带有 标签的跑步者builds-images。如果您使用 gitlab.com 或自托管且 Gitlab 版本至少为 13.2,则可以在项目的“跑步者”页面中编辑跑步者的详细信息(详细信息位于: https: //docs.gitlab.com/ee/ ci/runners/#view-and-manage-group-runners)。否则,可以在注册跑步者时设置标签。对于您的用例,在不进一步更改 .gitlab-ci.yml 文件的情况下,我只会标记一名跑步者。
另一种选择是将构建的镜像推送到 docker hub ( https://docs.docker.com/docker-hub/ )、Gitlab 的注册表 ( https://docs.gitlab.com/ee/user/packages/container_registry /),或其他可以支持 docker 映像的注册表 ( https://aws.amazon.com/ecr/ )。然后,在任何需要该映像的作业中,从注册表中将其拉出并使用它。
对于你的例子:
stages:
- build
- dev1:build
build:
stage: build
before_script:
- docker login [registry_url] #...
script:
- docker build --rm -t broker-connect-dev1-${CI_COMMIT_SHORT_SHA} -f BrokerConnect/Dockerfile .
- docker push broker-connect-dev1-${CI_COMMIT_SHORT_SHA}
only:
- dev1/release
tags:
- itela-spot-runner
build-dev1:
stage: dev1:build
before_script:
- docker login [registry_url] #...
script:
- docker pull broker-connect-dev1-${CI_COMMIT_SHORT_SHA}
- docker tag broker-connect-dev1-${CI_COMMIT_SHORT_SHA}:latest 19950818/broker-connect:${DEV1_TAG}
only:
- dev1/release
tags:
- itela-spot-runner
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6451 次 |
| 最近记录: |