温馨提示×

Linux中GitLab的CI/CD流程怎样设置

小樊
45
2025-11-04 18:38:10
栏目: 智能运维

Linux环境下GitLab CI/CD流程设置指南

1. 准备工作

在开始配置前,需确保以下前提条件满足:

  • 已拥有GitLab项目(自建或GitLab.com托管);
  • 项目代码已推送至GitLab仓库;
  • 服务器具备网络访问权限(能连接GitLab实例)。

2. 安装GitLab Runner

GitLab Runner是执行CI/CD任务的代理,需先安装并注册到GitLab实例。

2.1 安装GitLab Runner

Ubuntu/Debian为例,通过包管理器安装:

# 添加GitLab Runner官方GPG密钥和源
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 -y

CentOS/RHEL为例,使用Yum安装:

# 添加GitLab Runner Yum源
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash

# 安装GitLab Runner
sudo yum install gitlab-ci-multi-runner -y
2.2 注册GitLab Runner

执行注册命令,按提示输入GitLab实例URL和注册Token(可在项目→Settings→CI/CD→Runners中获取):

sudo gitlab-runner register
  • 关键参数说明
    • --url:GitLab实例地址(如https://gitlab.com或自建实例地址);
    • --token:项目注册Token(仅首次注册项目时有效);
    • --executor:执行器类型(推荐shell(本地执行)、docker(容器化执行)或kubernetes(K8s集群执行));
    • --description:Runner描述(如My Linux Runner);
    • --tag-list:Runner标签(如ci,deploy,用于匹配流水线中的tags要求)。
2.3 启动Runner服务
# 设置开机自启并立即启动
sudo systemctl enable gitlab-runner
sudo systemctl start gitlab-runner

验证Runner状态:

sudo gitlab-runner status

3. 创建.gitlab-ci.yml配置文件

.gitlab-ci.yml是CI/CD流程的核心配置文件,需放置在项目根目录下,定义阶段(Stages)、**任务(Jobs)**及执行逻辑。

3.1 基础配置示例

以下是一个涵盖构建→测试→部署的基础流程示例(适用于Java项目):

# 定义流水线阶段(按顺序执行)
stages:
  - build
  - test
  - deploy

# 构建任务
build_job:
  stage: build
  script:
    - echo "Building the project..."
    - ./gradlew build  # 或mvn clean package(Maven项目)
  artifacts:
    paths:
      - build/libs/*.jar  # 保存构建产物(供后续任务使用)
    expire_in: 1 hour     # 产物过期时间(可选)

# 测试任务(仅在构建成功后执行)
test_job:
  stage: test
  script:
    - echo "Running unit tests..."
    - ./gradlew test  # 或mvn test
  rules:
    - when: always      # 无论构建是否成功都执行(可根据需求调整)

# 部署任务(仅当代码推送到master分支时执行)
deploy_job:
  stage: deploy
  script:
    - echo "Deploying to production server..."
    - scp build/libs/*.jar user@production-server:/opt/app/
    - ssh user@production-server "systemctl restart my-app.service"
  only:
    - master            # 仅master分支触发
  tags:
    - deploy            # 仅匹配带deploy标签的Runner
3.2 关键配置说明
  • stages:定义流水线的阶段顺序(如build→test→deploy),任务按阶段依次执行;
  • script:任务执行的具体命令(如编译、测试、部署);
  • artifacts:保存任务生成的文件(如构建产物、测试报告),供后续任务下载使用;
  • rules:控制任务触发条件(如when: always表示始终执行,when: on_success表示仅在成功时执行);
  • only/except:限制任务触发的分支或路径(如only: - master表示仅master分支触发);
  • tags:匹配Runner的标签(如tags: - docker表示仅由带docker标签的Runner执行)。

4. 配置CI/CD变量(可选但推荐)

敏感信息(如服务器密码、Docker Registry凭证)不应直接写在.gitlab-ci.yml中,需通过CI/CD变量管理。
操作步骤:

  1. 进入项目→Settings→CI/CD→Variables;
  2. 点击"Add variable",输入Key(如DEPLOY_SERVER_PASSWORD)和Value(如服务器密码);
  3. 勾选"Mask variable"(隐藏变量值)和"Protect variable"(仅受保护分支可用);
  4. .gitlab-ci.yml中通过$KEY引用变量:
    deploy_job:
      script:
        - sshpass -p "$DEPLOY_SERVER_PASSWORD" scp build/libs/*.jar user@production-server:/opt/app/
    

5. 触发CI/CD流水线

流水线触发方式有两种:

  • 自动触发:当代码推送到仓库(如git push origin master)或创建合并请求时,自动启动流水线;
  • 手动触发:在项目→CI/CD→Pipelines页面点击"Run pipeline",选择分支或输入变量值。

6. 查看与调试流水线

  • 查看流水线状态:进入项目→CI/CD→Pipelines,可查看所有流水线的执行状态(通过/失败/挂起);
  • 查看任务日志:点击流水线中的任务(如build_job),可查看详细的执行日志(包括命令输出和错误信息);
  • 调试失败任务:若任务失败,可通过日志定位问题(如命令不存在、依赖缺失),修改代码或配置后重新推送。

7. 进阶配置(可选)

  • 缓存优化:通过cache指令缓存依赖或中间文件,加速构建(如缓存node_modules.m2仓库):
    build_job:
      cache:
        paths:
          - .gradle/caches/  # Gradle缓存目录
        key: ${CI_COMMIT_REF_SLUG}  # 按分支生成缓存键
    
  • Docker集成:使用docker Executor构建和推送镜像(需配置Docker Registry认证):
    image: docker:latest
    services:
      - docker:dind  # 启用Docker-in-Docker
    variables:
      DOCKER_HOST: tcp://docker:2375
      DOCKER_TLS_CERTDIR: ""  # 禁用TLS(仅测试环境使用)
    build_image:
      script:
        - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
        - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
        - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
    
  • Kubernetes部署:通过kubectl命令将应用部署到K8s集群(需配置Kubeconfig):
    deploy_to_k8s:
      stage: deploy
      script:
        - kubectl config set-cluster k8s-cluster --server="$KUBE_SERVER"
        - kubectl config set-credentials k8s-user --token="$KUBE_TOKEN"
        - kubectl config set-context k8s-context --cluster=k8s-cluster --user=k8s-user
        - kubectl config use-context k8s-context
        - kubectl set image deployment/my-app my-app=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
      only:
        - master
    

通过以上步骤,即可在Linux环境下完成GitLab CI/CD流程的设置,实现代码的自动化构建、测试和部署。根据项目需求,可进一步扩展流程(如添加代码质量检查、自动化通知等)。

0