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

GitLab CI/CD流水线测试成功后未触发Deploy阶段问题

问题排查与修复方案

核心问题分析

测试阶段成功后Deploy停滞1小时后跳过,大概率是GitLab Runner执行环境缺少SSH工具,或者SSH连接服务器失败导致卡住,另外部署脚本本身也存在冗余和风险点。

分步修复

1. 给Deploy阶段添加SSH依赖

你用的docker:24.0.5镜像默认没有安装ssh客户端,执行ssh-agent、ssh-add这些命令会报错或卡住。需要在deploy的before_script里安装ssh工具:

deploy:
  stage: deploy
  before_script:
    - apk add --no-cache openssh-client  # Alpine镜像用apk安装ssh工具
  script:
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" > /tmp/deploy_key
    - chmod 600 /tmp/deploy_key
    - ssh-add /tmp/deploy_key
    - ssh -o StrictHostKeyChecking=no root@serverIP 'bash -s' < deploy.sh
  only:
    - master

2. 修复deploy.sh的冗余与风险

你的deploy脚本里有没必要的操作,还没处理旧容器端口冲突问题:

# 先停止并删除旧容器(如果存在,|| true避免容器不存在时报错中断)
docker stop cicd-app || true
docker rm cicd-app || true

# 拉取最新镜像(不需要再build,除非你要在服务器重新构建)
docker pull golamrabbani3580/cicd:v1

# 用新镜像启动容器,指定容器名方便后续管理
docker run -d --name cicd-app -p 3000:3000 golamrabbani3580/cicd:v1

原脚本里的docker build -t cicd:v1 .完全多余:你已经从Docker Hub拉取了镜像,build会尝试用本地Dockerfile重新构建,若服务器上没有Dockerfile会直接失败。

3. 确认分支匹配

检查当前提交的分支是不是master,因为你设置了only: master,如果是其他分支,Deploy阶段会直接跳过(这个可能性较低,但也要确认)。

4. 调试SSH连接

如果还是卡住,可以在deploy脚本里加调试输出,定位连接问题:

script:
  - apk add --no-cache openssh-client
  - eval $(ssh-agent -s)
  - echo "$SSH_PRIVATE_KEY" > /tmp/deploy_key
  - chmod 600 /tmp/deploy_key
  - ssh-add /tmp/deploy_key
  - ssh -v -o StrictHostKeyChecking=no root@serverIP 'echo "SSH连接成功"'  # 先测试基础连接
  - ssh -o StrictHostKeyChecking=no root@serverIP 'bash -s' < deploy.sh

-v会输出SSH连接的详细日志,能帮你快速定位是密钥错误、服务器IP无法访问还是权限问题。

内容的提问来源于stack exchange,提问作者Rabbani_

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:55:34