温馨提示×

ubuntu下gitlab持续集成实践

小樊
40
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