温馨提示×

Debian上如何配置GitLab的CI/CD

小樊
42
2025-09-21 21:06:29
栏目: 智能运维

1. 准备工作:确保Debian系统基础环境就绪
在配置GitLab CI/CD前,需确保Debian系统已更新且安装必要依赖,为后续步骤提供基础支持:

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl openssh-server ca-certificates tzdata perl

2. 安装GitLab Runner(CI/CD任务执行代理)
GitLab Runner是执行.gitlab-ci.yml中定义任务的守护进程,需先安装并注册到GitLab实例:

  • 添加GitLab Runner仓库并安装
    curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
    sudo apt install gitlab-runner -y
    
  • 注册Runner到GitLab项目
    运行以下命令,按提示输入GitLab实例URL(如http://your-gitlab-server)和项目注册令牌(从GitLab项目→SettingsCI/CDRunners获取):
    sudo gitlab-runner register
    
    选择合适的执行器(如Shell,适合简单脚本;Docker,适合容器化环境),并设置Runner描述(如debian-runner)和标签(如linux)。

3. 编写核心配置:.gitlab-ci.yml文件
在项目根目录创建.gitlab-ci.yml文件,定义CI/CD流程的阶段(Stages)任务(Jobs)执行逻辑。以下是一个基础示例:

# 定义阶段执行顺序(build→test→deploy)
stages:
  - build
  - test
  - deploy

# 定义全局变量(可选,如项目名称、目录)
variables:
  PROJECT_NAME: "my-debian-app"
  PROJECT_DIR: "/opt/${PROJECT_NAME}"

# 构建阶段:编译或打包项目
build_job:
  stage: build
  script:
    - echo "Building ${PROJECT_NAME}..."
    - mkdir -p ${PROJECT_DIR}
    - cp -r * ${PROJECT_DIR}/  # 模拟复制项目文件到目标目录
  artifacts:
    paths:
      - ${PROJECT_DIR}/  # 将构建产物传递给后续阶段
    expire_in: 1 week    # 工件保留1周

# 测试阶段:运行项目测试
test_job:
  stage: test
  script:
    - echo "Running tests for ${PROJECT_NAME}..."
    - cd ${PROJECT_DIR} && echo "Test passed!"  # 模拟测试命令
  needs: ["build_job"]   # 依赖build_job成功完成

# 部署阶段:将应用部署到目标服务器
deploy_job:
  stage: deploy
  script:
    - echo "Deploying ${PROJECT_NAME} to production..."
    - scp -r ${PROJECT_DIR}/* user@remote-server:/var/www/html/  # 模拟SCP部署
  only:
    - master             # 仅master分支触发部署
  when: manual           # 手动触发(避免自动部署风险)

4. 配置高级功能(可选但常用)

  • SSH密钥:实现远程服务器无密码访问
    若部署阶段需要SSH连接到远程服务器,需配置SSH密钥:

    • 在Runner服务器生成密钥对:
      ssh-keygen -t rsa -b 4096 -C "gitlab-ci-runner" -N "" -f ~/.ssh/gitlab_runner_key
      
    • 将公钥(id_rsa.pub)添加到远程服务器的~/.ssh/authorized_keys文件中。
    • 在GitLab项目→SettingsCI/CDVariables中添加变量:
      • SSH_PRIVATE_KEY:值设置为私钥内容(cat ~/.ssh/gitlab_runner_key)。
    • .gitlab-ci.ymlbefore_script中添加SSH配置:
      before_script:
        - 'which ssh-agent || (apt-get update -y && apt-get install -y openssh-client)'
        - eval $(ssh-agent -s)
        - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
        - mkdir -p ~/.ssh
        - chmod 700 ~/.ssh
        - ssh-keyscan remote-server >> ~/.ssh/known_hosts
        - chmod 644 ~/.ssh/known_hosts
      
  • 缓存:加速构建过程
    通过缓存依赖或中间文件,减少重复下载时间(如Python的pip缓存):

    cache:
      paths:
        - .cache/pip/  # 缓存pip安装的包
    

5. 触发与监控CI/CD管道

  • 自动触发:将.gitlab-ci.yml文件提交到GitLab仓库并推送,GitLab会自动检测并触发管道:
    git add .gitlab-ci.yml
    git commit -m "Add GitLab CI/CD configuration"
    git push origin master
    
  • 手动触发:若deploy_job设置为when: manual,可在GitLab项目→CI/CDPipelines中点击“Run pipeline”手动启动部署。
  • 监控日志:在CI/CDPipelines页面查看各阶段执行状态,点击任务可查看详细日志,用于调试失败问题。

注意事项

  • 确保GitLab Runner服务器已安装对应执行器所需工具(如Docker执行器需安装Docker)。
  • 敏感信息(如SSH私钥、数据库密码)应通过GitLab的Variables功能配置,避免硬编码在.gitlab-ci.yml中。
  • 根据项目需求调整.gitlab-ci.yml的阶段划分和任务脚本(如添加lint阶段检查代码风格)。

0