温馨提示×

ubuntu下gitlab持续集成实践

小樊
41
2025-10-21 03:47:29
栏目: 智能运维

Ubuntu下GitLab持续集成(CI)实践指南
GitLab CI/CD是GitLab内置的自动化工具链,通过.gitlab-ci.yml配置文件定义流程,结合GitLab Runner执行任务,实现代码的自动化构建、测试、部署。以下是在Ubuntu环境下实践GitLab CI的关键步骤:

一、前置准备:安装GitLab

在Ubuntu上安装GitLab是实践CI的基础,常用安装方式有两种:

  1. 官方脚本安装(推荐)
    更新系统包并安装依赖:
    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
    sudo apt-get install gitlab-ce
    
    配置GitLab外部URL(替换为你的域名/IP):
    sudo vim /etc/gitlab/gitlab.rb
    # 修改以下行
    external_url 'http://your-gitlab-domain'
    
    重新配置并启动GitLab:
    sudo gitlab-ctl reconfigure && sudo gitlab-ctl start
    
  2. Docker安装(快速部署)
    若已安装Docker,可通过Docker Compose快速部署:
    sudo apt-get install -y docker.io docker-compose
    
    创建docker-compose.yml文件:
    version: '3'
    services:
      gitlab:
        image: gitlab/gitlab-ce:latest
        restart: always
        environment:
          GITLAB_OMNIBUS_CONFIG: |
            external_url 'http://your-gitlab-domain'
        ports:
          - '80:80'
          - '443:443'
        volumes:
          - '/etc/gitlab:/etc/gitlab'
          - '/var/run/docker.sock:/var/run/docker.sock'
    
    启动GitLab容器:
    sudo docker-compose up -d
    

二、安装与配置GitLab Runner

GitLab Runner是执行CI任务的代理,需单独安装并注册到GitLab项目。

  1. 安装Runner
    推荐使用Docker运行Runner(避免依赖冲突):
    docker pull gitlab/gitlab-runner:latest
    docker run -d --name gitlab-runner --restart always \
      -v /var/run/docker.sock:/var/run/docker.sock \
      -v gitlab-runner-config:/etc/gitlab-runner \
      gitlab/gitlab-runner:latest
    
  2. 注册Runner
    • 进入GitLab项目页面,导航至Settings → CI/CD → Runners,点击“Register a Runner”。
    • 复制显示的URLToken,在Runner容器内执行注册命令(以Docker执行器为例):
      docker exec -it gitlab-runner gitlab-runner register \
        --non-interactive \
        --executor "docker" \
        --docker-image alpine:latest \
        --url "http://your-gitlab-domain" \
        --registration-token "YOUR_REGISTRATION_TOKEN" \
        --description "ubuntu-docker-runner" \
        --tag-list "ubuntu,docker" \
        --run-untagged="false" \
        --locked="false" \
        --docker-volumes "/var/run/docker.sock:/var/run/docker.sock" \
        --access-level="not_protected"
      
    • 注册成功后,Runner会出现在项目Runners列表中。

三、创建.gitlab-ci.yml配置文件

.gitlab-ci.yml是CI/CD流程的核心配置文件,需放置在项目根目录下。以下是一个基础示例(适用于Java项目):

stages:
  - build
  - test
  - deploy

variables:
  MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN"

cache:
  paths:
    - .m2/repository/

build_job:
  stage: build
  image: maven:3.8.7-openjdk-17
  script:
    - echo "Downloading dependencies..."
    - mvn dependency:go-offline
    - echo "Building project..."
    - mvn clean package -DskipTests
  artifacts:
    paths:
      - target/*.jar
    expire_in: 1 hour

test_job:
  stage: test
  image: maven:3.8.7-openjdk-17
  script:
    - echo "Running unit tests..."
    - mvn test
  artifacts:
    when: always
    reports:
      junit: target/surefire-reports/*.xml

deploy_job:
  stage: deploy
  image: alpine:latest
  script:
    - echo "Deploying to production server..."
    - apk add --no-cache openssh
    - ssh -o StrictHostKeyChecking=no user@production-server "mkdir -p /opt/app && scp target/*.jar user@production-server:/opt/app/app.jar"
    - ssh -o StrictHostKeyChecking=no user@production-server "cd /opt/app && nohup java -jar app.jar > app.log 2>&1 &"
  only:
    - main  # 仅main分支触发部署

配置说明

  • stages:定义流水线阶段(build→test→deploy),任务按阶段顺序执行。
  • variables:设置全局变量(如Maven配置),避免硬编码。
  • cache:缓存依赖目录(如Maven的.m2),加速后续构建。
  • artifacts:传递构建产物(如JAR文件)到后续任务。
  • only:限制任务触发条件(如仅main分支触发部署)。

四、触发与监控CI/CD流程

  1. 触发流程
    .gitlab-ci.yml文件提交到GitLab仓库并推送:
    git add .gitlab-ci.yml
    git commit -m "Add GitLab CI configuration"
    git push origin main
    
    GitLab会自动检测到配置文件并触发流水线。
  2. 监控流程
    • 进入GitLab项目页面,点击左侧菜单CI/CD → Pipelines,查看流水线整体状态(成功/失败/运行中)。
    • 点击具体流水线ID,进入Jobs页面,查看每个任务的执行日志、耗时及输出结果。

五、高级优化技巧

  1. 使用Docker镜像简化环境配置
    在Job中指定Docker镜像(如image: maven:3.8.7-openjdk-17),避免手动安装依赖,确保环境一致性。
  2. 缓存依赖提升构建速度
    通过cache关键字缓存依赖目录(如.m2/repository/node_modules/),减少重复下载时间。
  3. 条件执行控制任务范围
    使用only/except关键字限制任务触发条件(如仅main分支触发部署,或仅develop分支触发测试)。
  4. 安全配置敏感信息
    将API密钥、数据库密码等敏感信息存储在GitLab的Settings → CI/CD → Variables中,通过$变量名引用(如$DB_PASSWORD),避免硬编码。
  5. 并行执行加快流程
    在Job中添加parallel: 2(并行数),让多个任务同时执行(如同时运行单元测试和集成测试),缩短流水线时间。

通过以上步骤,可在Ubuntu环境下快速搭建GitLab CI/CD流程,实现代码的自动化构建、测试与部署。根据项目需求,可进一步扩展流程(如添加SonarQube代码扫描、Docker镜像构建等),提升开发效率与代码质量。

0