如何在GitLab/GitHub的GitLab CI/CD中成功运行curl命令?
解决GitLab CI/CD的两个核心问题
一、修复Ubuntu源超时无法安装依赖的问题
GitLab CI运行环境访问Ubuntu默认官方源常存在网络延迟,导致apt-get超时失败,可通过替换国内镜像源、简化安装步骤解决:
修改.gitlab-ci.yml中的before_script部分:
.install-pre-reqs: &install-pre-reqs image: ubuntu:20.04 before_script: # 替换为阿里云Ubuntu20.04镜像源,提升访问速度 - sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list - apt-get update -y # 移除upgrade步骤,避免不必要的耗时和网络请求 - apt-get install -y zip unzip curl fastjar - chmod +x deploy.sh
说明:
- 国内镜像源(阿里云、清华、中科大等)在多数CI环境下访问速度更快,可避免超时
- 去掉
apt-get upgrade -y,基础镜像的软件包版本足够满足需求,升级会增加不必要的网络开销和失败风险
二、修复curl访问localhost失败的问题
本地执行curl正常是因为你的本地机器运行了9998端口的服务,但GitLab CI的runner是独立容器环境,localhost指向容器自身而非你的本地机器,需针对性处理:
情况1:服务需要在CI容器内启动
如果9998端口的服务是CI流程的一部分,需先在CI中启动服务,等待就绪后再执行curl:
test: <<: *install-pre-reqs stage: test script: - echo 'test' # 启动你的服务(替换为实际启动命令) - ./your-service-start-command & # 等待服务就绪,可使用sleep或更可靠的端口检查工具 - sleep 10 # 或者安装wait-for-it工具检查端口 - apt-get install -y wait-for-it - wait-for-it localhost:9998 -t 30 - ./deploy.sh - echo "content" - exit 0
情况2:服务部署在外部机器(比如你的本地机器)
- 将
deploy.sh中的http://localhost:9998替换为服务所在机器的公网IP/可访问域名,同时确保:- 服务绑定
0.0.0.0而非127.0.0.1(允许外部访问) - 机器的防火墙/安全组开放9998端口,允许GitLab runner的IP访问
- 服务绑定
修改后的deploy.sh示例:
#!/bin/sh curl -u "admin:admin" -X POST "http://你的公网IP:9998/rest/admin/system/restart"
验证步骤
- 提交修改后的
.gitlab-ci.yml和deploy.sh到仓库 - 触发GitLab CI流水线,检查依赖安装是否成功,curl命令是否正常执行
内容的提问来源于stack exchange,提问作者kitten_world
相关产品推荐
相关产品推荐

