Ubuntu下GitLab持续集成(CI)实践指南
GitLab CI/CD是GitLab内置的自动化工具链,通过.gitlab-ci.yml配置文件定义流程,结合GitLab Runner执行任务,实现代码的自动化构建、测试、部署。以下是在Ubuntu环境下实践GitLab CI的关键步骤:
一、前置准备:安装GitLab
在Ubuntu上安装GitLab是实践CI的基础,常用安装方式有两种:
- 官方脚本安装(推荐)
更新系统包并安装依赖:
添加GitLab官方仓库并安装:sudo apt-get update && sudo apt-get install -y curl openssh-server ca-certificates tzdata perl
配置GitLab外部URL(替换为你的域名/IP):curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash sudo apt-get install gitlab-ce重新配置并启动GitLab:sudo vim /etc/gitlab/gitlab.rb # 修改以下行 external_url 'http://your-gitlab-domain'sudo gitlab-ctl reconfigure && sudo gitlab-ctl start - Docker安装(快速部署)
若已安装Docker,可通过Docker Compose快速部署:
创建sudo apt-get install -y docker.io docker-composedocker-compose.yml文件:启动GitLab容器: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'sudo docker-compose up -d
二、安装与配置GitLab Runner
GitLab Runner是执行CI任务的代理,需单独安装并注册到GitLab项目。
- 安装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 - 注册Runner
- 进入GitLab项目页面,导航至Settings → CI/CD → Runners,点击“Register a Runner”。
- 复制显示的URL和Token,在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流程
- 触发流程
将.gitlab-ci.yml文件提交到GitLab仓库并推送:GitLab会自动检测到配置文件并触发流水线。git add .gitlab-ci.yml git commit -m "Add GitLab CI configuration" git push origin main - 监控流程
- 进入GitLab项目页面,点击左侧菜单CI/CD → Pipelines,查看流水线整体状态(成功/失败/运行中)。
- 点击具体流水线ID,进入Jobs页面,查看每个任务的执行日志、耗时及输出结果。
五、高级优化技巧
- 使用Docker镜像简化环境配置
在Job中指定Docker镜像(如image: maven:3.8.7-openjdk-17),避免手动安装依赖,确保环境一致性。 - 缓存依赖提升构建速度
通过cache关键字缓存依赖目录(如.m2/repository/、node_modules/),减少重复下载时间。 - 条件执行控制任务范围
使用only/except关键字限制任务触发条件(如仅main分支触发部署,或仅develop分支触发测试)。 - 安全配置敏感信息
将API密钥、数据库密码等敏感信息存储在GitLab的Settings → CI/CD → Variables中,通过$变量名引用(如$DB_PASSWORD),避免硬编码。 - 并行执行加快流程
在Job中添加parallel: 2(并行数),让多个任务同时执行(如同时运行单元测试和集成测试),缩短流水线时间。
通过以上步骤,可在Ubuntu环境下快速搭建GitLab CI/CD流程,实现代码的自动化构建、测试与部署。根据项目需求,可进一步扩展流程(如添加SonarQube代码扫描、Docker镜像构建等),提升开发效率与代码质量。
以上就是关于“ubuntu下gitlab持续集成实践”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm