温馨提示×

Linux中GitLab如何部署CI/CD

小樊
37
2025-10-16 10:06:50
栏目: 智能运维

1. 前置准备:安装GitLab(若未部署)
在Linux服务器上安装GitLab是实现CI/CD的基础。以Ubuntu为例,步骤如下:

  • 安装依赖包:sudo apt-get install -y curl openssh-server ca-certificates tzdata perl
  • 添加GitLab软件源:curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
  • 安装GitLab CE:sudo apt-get install gitlab-ce
  • 配置GitLab:编辑/etc/gitlab/gitlab.rb,设置external_url 'http://your-server-ip'(替换为服务器IP或域名),运行sudo gitlab-ctl reconfigure使配置生效
  • 启动服务:sudo gitlab-ctl start,并设置开机自启:sudo systemctl enable gitlab-ce
    访问http://your-server-ip完成GitLab初始化配置(设置root密码、管理员账号等)。

2. 安装与注册GitLab Runner
GitLab Runner是执行CI/CD任务的代理,需单独安装并注册到GitLab实例:

  • 安装Runner(以Ubuntu为例):
    curl -L --output /etc/apt/trusted.gpg.d/gitlab.asc https://packages.gitlab.com/gitlab/gitlab-runner/gpgkey echo "deb https://packages.gitlab.com/gitlab/gitlab-runner/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gitlab-runner.list sudo apt-get update sudo apt-get install gitlab-runner 
  • 注册Runner
    运行sudo gitlab-runner register,按提示输入:
    • GitLab实例URL(如https://gitlab.com或你的自建GitLab地址);
    • 注册Token(在GitLab项目页面→SettingsCI/CDRunners中获取);
    • 选择Executor(推荐shell,适用于简单任务;若需要隔离环境可选docker);
    • 设置Runner描述(如“My Linux Runner”)和标签(如linux,deploy,用于匹配项目中的Job标签)。
      注册完成后,Runner会自动启动并监听GitLab触发的任务。

3. 创建.gitlab-ci.yml配置文件
在项目根目录下创建.gitlab-ci.yml文件,定义CI/CD流程的核心逻辑(包括阶段、任务、产物等)。以下是一个通用示例:

stages: - build # 构建阶段:编译代码、生成产物 - test # 测试阶段:运行单元测试、集成测试 - deploy # 部署阶段:将产物部署到目标环境 # 构建任务 build_job: stage: build script: - echo "Building the project..." - mkdir -p build - cd build && cmake .. && make # 示例:C++项目构建 artifacts: paths: - build/*.jar # 保存构建产物(如Java的jar包) expire_in: 1 hour # 产物过期时间(可选) # 测试任务 test_job: stage: test script: - echo "Running tests..." - cd build && ctest # 示例:C++项目测试 needs: ["build_job"] # 依赖构建任务完成(可选,确保构建成功后再测试) # 部署任务(仅master分支触发) deploy_job: stage: deploy script: - echo "Deploying to production server..." - scp -r build/* user@remote-server:/var/www/html # 示例:SCP传输文件到Linux服务器 only: - master # 仅当代码推送到master分支时触发(可选,可改为其他分支或标签) 

关键说明

  • stages:定义流程的阶段顺序(必填,任务按阶段依次执行);
  • script:每个任务的具体执行命令(必填);
  • artifacts:保存任务生成的产物(如编译后的文件、测试报告),供后续任务使用(可选);
  • needs:指定任务依赖的其他任务(可选,确保依赖任务成功后再执行);
  • only/except:控制任务触发的条件(如仅特定分支、标签或提交信息)(可选)。

4. 配置CI/CD变量(可选但推荐)
若流程中需要敏感信息(如Docker Registry密码、服务器SSH密钥、第三方服务API密钥),可通过GitLab的CI/CD变量管理:

  • 进入项目页面→SettingsCI/CDVariables
  • 点击“Add variable”,输入变量名(如CI_DEPLOY_SERVER_SSH_KEY)和值(如服务器SSH私钥内容);
  • 勾选“Mask variable”(隐藏变量值,在日志中不显示)和“Protect variable”(仅受保护分支可使用);
  • .gitlab-ci.yml中通过$变量名引用(如ssh -i $CI_DEPLOY_SERVER_SSH_KEY user@remote-server)。

5. 触发CI/CD流程
.gitlab-ci.yml文件提交到GitLab仓库并推送,Runner会自动检测并执行流程:

git add .gitlab-ci.yml git commit -m "Add GitLab CI/CD configuration" git push origin master # 推送到master分支(根据only条件触发) 

触发后,可在GitLab项目页面→CI/CDPipelines查看流程执行状态(成功/失败)、日志输出及每个任务的详情。

6. 监控与调试

  • 查看流程状态:通过CI/CDPipelines查看所有流程的执行历史,点击流程ID可查看详情;
  • 查看任务日志:在流程详情页点击任务名称,可查看任务的实时输出(如编译错误、测试失败信息);
  • 调试失败任务:若任务失败,可在Runner所在服务器上查看Runner日志(sudo journalctl -u gitlab-runner),或在任务日志中分析错误原因(如命令不存在、权限不足)。

注意事项

  • Runner权限:确保Runner所在服务器有执行任务所需的权限(如访问GitLab仓库、写入部署目录、连接数据库等);
  • 产物管理:合理使用artifacts保存必要产物(如编译后的文件、测试报告),避免占用过多存储空间;
  • 安全性:敏感信息(如服务器密码、API密钥)务必通过CI/CD变量管理,不要直接写在.gitlab-ci.yml中;
  • 流程优化:根据项目需求调整阶段划分(如增加package阶段用于打包、sonarqube阶段用于代码质量检查),或使用Docker executor实现环境隔离(如用Docker镜像运行任务,避免依赖服务器环境)。

0