Gitlab Fargate在CI/CD期间无法提取映像



我的配置

config.toml

concurrent = 100
check_interval = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "xyz_project_name"
url = "https://gitlab.com/"
token = "yieSD7McA-WFMtFv5nzg"
executor = "custom"
builds_dir = "/opt/gitlab-runner/builds"
cache_dir = "/opt/gitlab-runner/cache"
[runners.custom]
privileged = true
config_exec = "/opt/gitlab-runner/fargate"
config_args = ["--config", "/etc/gitlab-runner/fargate.toml", "custom", "config"]
prepare_exec = "/opt/gitlab-runner/fargate"
prepare_args = ["--config", "/etc/gitlab-runner/fargate.toml", "custom", "prepare"]
run_exec = "/opt/gitlab-runner/fargate"
run_args = ["--config", "/etc/gitlab-runner/fargate.toml", "custom", "run"]
cleanup_exec = "/opt/gitlab-runner/fargate"
cleanup_args = ["--config", "/etc/gitlab-runner/fargate.toml", "custom", "cleanup"]

.gitlab-ci.yaml

image: docker:latest
stages:
- install_dependencies
- lint
- bundle
- build
- deploy
install_dependencies:
stage: install_dependencies
image: node:14
script:
- node -v
- npm -v
- ls node_modules
- npm install --unsafe-perm
artifacts:
paths:
- node_modules/
- version.v
- repo.name
lint:
image: node:14
stage: lint
script:
- npm run lint
bundle:
image: node:14
stage: bundle
script:
- npm run build:prod
artifacts:
paths:
- dist/
build:
stage: build
image: aws-docker:2.0.0
services:
- docker:dind
before_script:
- aws ecr get-login-password | docker login --username AWS --password-stdin $AWS_ECR_REGISTRY
script:
- docker build -t  $DOCKER_REGISTRY $DOCKER_REGISTRY:latest .
- docker push $DOCKER_REGISTRY:latest

问题:

管道产生以下错误

$ node -v
bash: line 140: node: command not found
ERRO[2022-04-20T03:49:47Z] Application execution failed

这个管道工作正常的GitLab运行器,但当我把它移动到Fargate运行器,它给出这个错误。我认为Fargate runner无法拉出图像

我能做的,我可以在容器映像中安装节点v-14。那么aws-docker:2.0.0

呢?感谢您花时间来详细说明您的请求,这真的很有帮助!😊

fargate自定义执行器完全忽略image:指令,如文档中所述:

忽略gitlab-ci.yml文件中的imageservice关键字。运行程序只使用任务定义中指定的值。

如文档中所述,在设置fargate运行程序时,必须准备一个包含所需所有软件的映像。这必须事先做。作业使用在安装文档的步骤6中创建的ECS任务定义中定义的这个映像。

但是aws-docker:2.0.0呢

Fargate的另一个关键限制是不可能在Fargate内部使用docker,因为在容器内部使用docker需要容器具有特权,但是特权容器在Fargate上是被AWS禁止的,因此这是不可能的。

还要注意,即使这个限制不存在,您也会在services:中遇到与image:相同的问题——执行器会忽略服务。

有一些不需要docker守护进程(因此不需要特权容器)的替代方法来构建和推送映像,例如使用kaniko来构建映像。您还可以查看GitLab博客,了解如何使用AWS CodeBuild在Fargate上构建容器

相关内容

最新更新