You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab流水线后续作业无法访问已安装包问题求助

GitLab CI流水线Docker构建推送故障排查与解决

错误原因

GitLab CI的每个作业都运行在独立的容器环境中,Prepare阶段安装的docker和awscli仅存在于该阶段的容器内。后续的Docker Login、Docker Build、Docker Push作业会启动全新的容器,自然找不到这些工具,从而抛出aws: not found、docker: not found错误。

解决方案

方案1:自定义预安装依赖的基础镜像(推荐)

制作包含python、docker-cli、awscli的自定义镜像,推送到你的镜像仓库(比如AWS ECR),让所有CI作业共享这个预配置的环境,避免重复安装。

  1. 创建自定义镜像的Dockerfile:
FROM python:3.11-alpine

# 安装docker客户端和awscli
RUN apk add --no-cache docker-cli
RUN pip install awscli
  1. 构建并推送镜像到ECR:
docker build -t $AWS_ECR_REGISTRY/gitlab-ci-base:3.11-alpine .
docker push $AWS_ECR_REGISTRY/gitlab-ci-base:3.11-alpine
  1. 修改gitlab-ci.yaml使用自定义镜像:
stages:
  - login
  - build
  - push

# 使用预安装依赖的自定义镜像
image: $AWS_ECR_REGISTRY/gitlab-ci-base:3.11-alpine

variables:
  PROJECT_NAME: jenkins
  AWS_ECR_REPOSITORY: $AWS_ECR_REGISTRY/ecommerce_$PROJECT_NAME
  ENVIRONMENT: stage
  VERSION: 1.0.0

# 全局配置AWS凭证,所有作业执行前都会运行
before_script:
  - aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID
  - aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY
  - aws configure set region $AWS_REGION

Docker Login:
  stage: login
  only:
    - stage
    - prod
  script:
    - aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_ECR_REGISTRY

Docker Build:
  stage: build
  only:
    - stage
    - prod
  script:
    - docker build --build-arg ENVIRONMENT=$ENVIRONMENT -t $AWS_ECR_REPOSITORY:latest .
    - docker build --build-arg ENVIRONMENT=$ENVIRONMENT -t $AWS_ECR_REPOSITORY:$VERSION .

Docker Push:
  stage: push
  only:
    - stage
    - prod
  script:
    - docker push $AWS_ECR_REPOSITORY:latest
    - docker push $AWS_ECR_REPOSITORY:$VERSION

方案2:全局Before Script统一安装依赖(快速临时解决)

如果暂时不想制作自定义镜像,可以在全局before_script中添加依赖安装步骤,让每个作业执行前自动安装所需工具:

stages:
  - login
  - build
  - push

image: python:3.11-alpine

variables:
  PROJECT_NAME: jenkins
  AWS_ECR_REPOSITORY: $AWS_ECR_REGISTRY/ecommerce_$PROJECT_NAME
  ENVIRONMENT: stage
  VERSION: 1.0.0

before_script:
  # 每个作业执行前安装依赖并配置AWS
  - apk add --no-cache docker
  - pip install awscli
  - aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID
  - aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY
  - aws configure set region $AWS_REGION

Docker Login:
  stage: login
  only:
    - stage
    - prod
  script:
    - aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_ECR_REGISTRY

Docker Build:
  stage: build
  only:
    - stage
    - prod
  script:
    - docker build --build-arg ENVIRONMENT=$ENVIRONMENT -t $AWS_ECR_REPOSITORY:latest .
    - docker build --build-arg ENVIRONMENT=$ENVIRONMENT -t $AWS_ECR_REPOSITORY:$VERSION .

Docker Push:
  stage: push
  only:
    - stage
    - prod
  script:
    - docker push $AWS_ECR_REPOSITORY:latest
    - docker push $AWS_ECR_REPOSITORY:$VERSION

注:此方案会在每个作业中重复安装依赖,长期使用会浪费时间和资源,仅适合临时测试。

内容的提问来源于stack exchange,提问作者Alberto Sanmartin Martinez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 22:22:42