Ubuntu下GitLab持续集成(CI)实践指南
GitLab CI/CD是GitLab内置的自动化工具链,通过.gitlab-ci.yml配置文件定义流程,结合GitLab Runner执行任务,实现代码的自动化构建、测试、部署。以下是在Ubuntu环境下实践GitLab CI的关键步骤:
在Ubuntu上安装GitLab是实践CI的基础,常用安装方式有两种:
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 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是执行CI任务的代理,需单独安装并注册到GitLab项目。
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 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" .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分支触发部署)。.gitlab-ci.yml文件提交到GitLab仓库并推送:git add .gitlab-ci.yml git commit -m "Add GitLab CI configuration" git push origin main GitLab会自动检测到配置文件并触发流水线。image: maven:3.8.7-openjdk-17),避免手动安装依赖,确保环境一致性。cache关键字缓存依赖目录(如.m2/repository/、node_modules/),减少重复下载时间。only/except关键字限制任务触发条件(如仅main分支触发部署,或仅develop分支触发测试)。$变量名引用(如$DB_PASSWORD),避免硬编码。parallel: 2(并行数),让多个任务同时执行(如同时运行单元测试和集成测试),缩短流水线时间。通过以上步骤,可在Ubuntu环境下快速搭建GitLab CI/CD流程,实现代码的自动化构建、测试与部署。根据项目需求,可进一步扩展流程(如添加SonarQube代码扫描、Docker镜像构建等),提升开发效率与代码质量。