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镜像构建等),提升开发效率与代码质量。