GitLab CI配置构建推送Docker镜像并部署到AWS EC2故障排查
GitLab CI 配置修复方案
你给出的原始配置核心逻辑是可行的,只要修复几个配置缺陷即可实现Docker镜像构建、推送GitLab Registry、部署到AWS EC2的全流程。
原始配置核心问题
tag变量作用域问题:build阶段定义的tag变量仅在当前job生效,deploy阶段无法读取,导致拉镜像时标签匹配错误- 依赖工具缺失:deploy阶段未指定镜像,默认runner镜像没有预装ssh客户端、ssh-add等工具,无法执行远程登录逻辑
- 无用逻辑冗余:after_script中的
docker logout执行在runner本地而非EC2实例,完全无效 - 远程命令变量问题:ssh执行远程命令时未正确传递镜像标签变量,可能导致拉取镜像失败
修复后完整配置
stages: - build - deploy build: image: docker:latest stage: build services: - docker:dind before_script: - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY script: - | if [[ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ]]; then export IMAGE_TAG="$CI_REGISTRY_IMAGE:latest" echo "Running on default branch '$CI_DEFAULT_BRANCH': tag = 'latest'" else export IMAGE_TAG="$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" echo "Running on branch '$CI_COMMIT_BRANCH': tag = $CI_COMMIT_REF_SLUG" fi # 把镜像标签写入环境变量传递文件 - echo "IMAGE_TAG=$IMAGE_TAG" >> build.env - docker build --pull -t "$IMAGE_TAG" . - docker push "$IMAGE_TAG" artifacts: reports: dotenv: build.env # 声明该文件为跨阶段环境变量传递产物 rules: - if: $CI_COMMIT_BRANCH exists: - Dockerfile deploy: stage: deploy # 指定轻量镜像并预装ssh依赖 image: alpine:latest before_script: - apk add --no-cache openssh-client - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - - mkdir -p ~/.ssh - chmod 700 ~/.ssh script: # 远程执行部署命令,直接使用build阶段传递的镜像标签 - ssh -o StrictHostKeyChecking=no ubuntu@18.0.0.82 " echo '$CI_REGISTRY_PASSWORD' | sudo docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY; sudo docker pull $IMAGE_TAG; cd /home/crud_app; sudo docker-compose up -d --force-recreate; sudo docker logout $CI_REGISTRY; " dependencies: - build # 声明依赖build阶段产物,获取镜像标签变量 rules: - if: $CI_COMMIT_BRANCH exists: - Dockerfile
额外配置校验项
- GitLab项目后台已配置
SSH_PRIVATE_KEY变量,对应密钥对的公钥已添加到EC2实例ubuntu用户的~/.ssh/authorized_keys文件中 - EC2实例安全组已放行GitLab Runner出口IP的22端口访问权限
- EC2实例的ubuntu用户已配置docker命令sudo免密,或已加入docker用户组(可去掉命令中的sudo避免权限问题)
/home/crud_app目录下的docker-compose.yml中引用的镜像名称与推送到GitLab Registry的镜像名称完全匹配
内容的提问来源于stack exchange,提问作者Shaheel_Azhar
相关产品推荐
相关产品推荐

