Linux环境下GitLab实现持续集成(CI)与持续交付(CD)的完整流程
GitLab Runner是执行CI/CD任务的代理工具,需先在Linux服务器(如Ubuntu、CentOS)上安装并注册。
curl -L --output /etc/apt/trusted.gpg.d/gitlab.asc https://packages.gitlab.com/gitlab/gitlab-runner/gpgkey
echo "deb https://packages.gitlab.com/gitlab/gitlab-runner/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gitlab-runner.list
sudo apt-get update
sudo apt-get install gitlab-runner
docker执行器):sudo gitlab-runner register
输入GitLab实例URL、项目Token,设置Runner标签(如ci、deploy),便于后续在.gitlab-ci.yml中匹配。.gitlab-ci.yml文件该文件是GitLab CI/CD的“蓝图”,定义了**流水线(Pipeline)**的阶段(Stages)、任务(Jobs)及执行逻辑,需放置在项目根目录。
stages:
- build # 构建阶段:编译代码、生成产物
- test # 测试阶段:运行单元测试、集成测试
- deploy # 部署阶段:将产物发布到目标环境
build_job:
stage: build
script:
- echo "正在构建应用..."
- mvn clean package # 示例:Maven构建Java项目
artifacts: # 将构建产物传递给后续阶段
paths:
- target/*.jar
expire_in: 1 hour # 产物有效期
test_job:
stage: test
script:
- echo "正在运行测试..."
- mvn test # 示例:运行Maven测试
dependencies: # 依赖上一阶段的产物
- build_job
cache: # 缓存依赖,加速后续构建
paths:
- .m2/repository/
deploy_job:
stage: deploy
script:
- echo "正在部署到生产环境..."
- scp target/*.jar user@production-server:/opt/app/ # 示例:SCP传输产物到服务器
only: # 仅在master分支推送时触发
- master
build→test→deploy),Job必须属于某一阶段。stage、script(执行命令)。node_modules、.m2),减少重复下载时间。master分支推送时部署,或通过Webhook触发)。--tag-list参数为Runner设置标签(如ci、deploy),在.gitlab-ci.yml中通过tags指定Job运行的Runner,实现资源隔离(如deploy Job仅由带deploy标签的Runner执行)。master分支)时,流水线会自动触发。artifacts传递构建产物(如JAR、Docker镜像),通过cache缓存依赖目录(如node_modules、.m2),减少重复构建时间,提升流水线效率。environment关键字定义不同环境(如staging、production),结合rules控制Job触发条件(如$CI_COMMIT_REF_NAME == "staging"时部署到 staging 环境)。docker执行器或docker build命令构建Docker镜像,结合docker push将镜像推送到镜像仓库(如Docker Hub、GitLab Container Registry),实现容器化部署。kubectl命令或Helm Chart将Docker镜像部署到Kubernetes集群,实现自动化扩缩容和滚动更新。slack、email或webhook配置通知,在流水线成功/失败时发送提醒(如Slack消息、邮件通知),及时告知团队。build_job的输出),帮助快速定位问题(如编译错误、测试失败)。test_job耗时过长),优化Job配置(如并行运行测试)。通过以上步骤,即可在Linux环境下使用GitLab实现完整的持续集成与持续交付流程,自动化代码构建、测试和部署,提升开发效率和软件质量。