温馨提示×

如何在Linux中集成GitLab CI/CD

小樊
62
2025-09-19 02:27:40
栏目: 智能运维

1. 准备工作:安装GitLab(若未部署)
若你的Linux服务器尚未部署GitLab,需先完成安装。以Ubuntu为例,步骤如下:

  • 更新系统包:sudo apt-get update
  • 安装依赖: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),然后执行sudo gitlab-ctl reconfiguresudo gitlab-ctl start

2. 安装GitLab Runner(CI/CD执行代理)
GitLab Runner是执行.gitlab-ci.yml中任务的必要组件,需在Linux服务器上安装:

  • 通过包管理器安装(Debian/Ubuntu)
    添加GitLab Runner仓库: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-ci-multi-runner -y
  • 通过Docker安装(推荐)
    拉取GitLab Runner镜像并运行:docker run -d --name gitlab-runner --restart always --env TZ=Asia/Shanghai -v /home/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest

3. 注册GitLab Runner
Runner需注册到GitLab项目才能接收任务:

  • 执行注册命令:sudo gitlab-runner register(包管理器安装)或docker exec -it gitlab-runner gitlab-runner register(Docker安装)。
  • 按提示输入信息:
    • GitLab实例URL(如https://gitlab.com或你的自托管GitLab地址);
    • 注册令牌(从GitLab项目→Settings→CI/CD→Runners→Set up a specific Runner处获取);
    • Runner描述(如“Linux Runner”);
    • 标签(如“linux,docker”,用于匹配项目中的tags设置);
    • 执行器类型(推荐shell(直接在服务器执行)或docker(容器化执行),根据项目需求选择)。

4. 创建.gitlab-ci.yml配置文件
在项目根目录下创建.gitlab-ci.yml,定义CI/CD流程(核心配置)。示例如下:

stages:
  - build    # 构建阶段
  - test     # 测试阶段
  - deploy   # 部署阶段

variables:   # 定义变量(可选)
  MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"

build_job:
  stage: build
  image: maven:3.8.7-openjdk-11  # 使用Maven镜像
  script:
    - echo "Building project..."
    - mvn clean package -DskipTests  # 编译打包(跳过测试)
  artifacts:                       # 传递产物给后续Job
    paths:
      - target/*.jar
    expire_in: 1 hour              # 产物有效期

test_job:
  stage: test
  image: maven:3.8.7-openjdk-11
  script:
    - echo "Running tests..."
    - mvn test                       # 执行单元测试

deploy_job:
  stage: deploy
  image: alpine:latest               # 使用轻量级镜像
  before_script:
    - apk add --no-cache openssh     # 安装SSH客户端(用于部署)
  script:
    - echo "Deploying to production server..."
    - scp -o StrictHostKeyChecking=no target/*.jar user@your-server-ip:/opt/app/  # 复制产物到服务器
  only:                              # 触发条件
    - master                         # 仅master分支推送时触发

说明

  • stages:定义流水线阶段顺序(从上到下执行);
  • jobs:每个阶段可包含多个Job(如build_jobtest_job);
  • image:指定Job运行的Docker镜像(需包含所需工具,如Maven、Node.js);
  • script:Job执行的具体命令;
  • artifacts:将当前Job的产物(如编译后的JAR)传递给后续Job;
  • only:设置触发条件(如仅master分支变更时触发)。

5. 配置Runner与项目关联
注册Runner时,需确保其关联到目标GitLab项目。若未自动关联,可通过GitLab项目→Settings→CI/CD→Runners页面,点击“Expand”查看Runner的注册令牌,重新执行gitlab-runner register并输入正确令牌。

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

git add .gitlab-ci.yml
git commit -m "Add GitLab CI/CD configuration"
git push origin master

推送后,可在GitLab项目→CI/CD→Pipelines页面查看流水线状态(如“running”“success”“failed”),点击Job可查看详细日志。

7. 高级配置(可选)

  • 使用Docker Runner:在.gitlab-ci.yml中指定image(如node:16),Runner会自动拉取镜像并运行Job;
  • 缓存依赖:通过cache指令缓存依赖(如Maven的.m2目录),加速后续构建:
    cache:
      paths:
        - .m2/repository/
    
  • 设置环境变量:在GitLab项目→Settings→CI/CD→Variables中添加敏感信息(如服务器密码、API密钥),避免硬编码在.gitlab-ci.yml中;
  • 触发器配置:通过rulesonly/except设置更灵活的触发条件(如特定分支、标签或定时触发)。

注意事项

  • 确保Runner服务器安装了对应镜像所需的工具(如Docker Runner需安装Docker);
  • .gitlab-ci.yml文件需放在项目根目录,且语法正确(可通过GitLab的CI Lint工具验证);
  • 生产环境中,建议使用docker:dind(Docker-in-Docker)或kubernetes执行器,提升隔离性和可扩展性。

0