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

如何在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/可访问域名,同时确保:
    1. 服务绑定0.0.0.0而非127.0.0.1(允许外部访问)
    2. 机器的防火墙/安全组开放9998端口,允许GitLab runner的IP访问

修改后的deploy.sh示例:

#!/bin/sh
curl -u "admin:admin" -X POST "http://你的公网IP:9998/rest/admin/system/restart"

验证步骤

  1. 提交修改后的.gitlab-ci.yml和deploy.sh到仓库
  2. 触发GitLab CI流水线,检查依赖安装是否成功,curl命令是否正常执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 05:57:17