GitLab CI/CD自动化部署实战:从代码到生产的完整流程

文章最后更新时间:2026-04-14 08:43:13

手动部署效率低、容易出错。GitLab CI/CD是GitLab自带的持续集成/持续部署功能,配合Runner可以自动完成代码构建、测试、部署。本文分享GitLab CI/CD的完整配置流程。

一、GitLab CI/CD核心概念

Pipeline(流水线)

流水线是CI/CD的核心,包含多个Stage(阶段)。

Stage(阶段)

阶段是流水线的组成部分,如构建、测试、部署。

Job(任务)

任务是流水线的具体执行单元,每个Job属于一个Stage。

Runner(运行器)

Runner是执行Job的机器,可以是GitLab官方的Shared Runner或自建的Runner。

二、GitLab Runner安装配置

Docker方式安装Runner

docker run -d --name gitlab-runner --restart always CI_
  -v /srv/gitlab-runner/config:/etc/gitlab-runner CI_
  -v /var/run/docker.sock:/var/run/docker.sock CI_
  gitlab/gitlab-runner:latest

注册Runner

docker exec -it gitlab-runner gitlab-runner register

# 填写信息:
# GitLab URL: https://gitlab.com
# Token: 从项目设置中获取
# Description: my-runner
# Tags: docker
# Executor: docker
# Docker image: alpine

三、.gitlab-ci.yml配置

基础配置

stages:
  - build
  - test
  - deploy

variables:
  myimage: registry.gitlab.com/username/project
  DOCKER_DRIVER: overlay2

build:
  stage: build
  image: docker:20.10.16
  services:
    - docker:20.10.16-dind
  script:
    - docker login -u CI_$_USER -p CI_$ CI_$
    - docker build -t CI_$myimage:CI_$latest .
    - docker push CI_$myimage:CI_$latest
  only:
    - main

test:
  stage: test
  image: node:16-alpine
  script:
    - npm install
    - npm run test
  only:
    - main

deploy:
  stage: deploy
  image: ubuntu:22.04
  script:
    - apt-get update && apt-get install -y openssh-client
    - eval $(ssh-agent -s)
    - echo "CI_$" | tr -d 'CI_r' | ssh-add -
    - ssh -o StrictHostKeyChecking=no user@server "docker pull CI_$myimage:CI_$latest"
    - ssh -o StrictHostKeyChecking=no user@server "docker stop myapp || true"
    - ssh -o StrictHostKeyChecking=no user@server "docker rm myapp || true"
    - ssh -o StrictHostKeyChecking=no user@server "docker run -d --name myapp -p 8080:8080 CI_$myimage:CI_$latest"
  only:
    - main
  environment:
    name: production
    url: https://yourdomain.com

四、多环境部署配置

staging和production环境

stages:
  - build
  - test
  - deploy

build:
  stage: build
  image: docker:20.10.16
  services:
    - docker:20.10.16-dind
  script:
    - docker build -t CI_$myimage:CI_$latest .
    - docker push CI_$myimage:CI_$latest

test:
  stage: test
  image: node:16-alpine
  script:
    - npm install
    - npm run test

deploy_staging:
  stage: deploy
  script:
    - echo "Deploying to staging..."
    - docker-compose -f docker-compose.staging.yml up -d
  environment:
    name: staging
    url: https://staging.yourdomain.com
  only:
    - develop

deploy_production:
  stage: deploy
  script:
    - echo "Deploying to production..."
    - docker-compose -f docker-compose.production.yml up -d
  environment:
    name: production
    url: https://yourdomain.com
  when: manual
  only:
    - main

五、缓存配置

NPM缓存

cache:
  key: "cache-key"
  paths:
    - node_modules/

npm_build:
  stage: build
  image: node:16-alpine
  cache:
    key: npm-cache
    paths:
      - node_modules/
  script:
    - npm ci

Docker层缓存

build:
  stage: build
  image: docker:20.10.16
  services:
    - docker:20.10.16-dind
  variables:
    DOCKER_TLS_CERTDIR: "/certs"
  cache:
    key: docker-build
    paths:
      - /certs/client
  script:
    - docker build --cache-from CI_$myimage:latest -t CI_$myimage:CI_$latest .

六、Artifact与依赖

保存构建产物

build:
  stage: build
  script:
    - npm run build
  artifacts:
    paths:
      - dist/
    expire_in: 1 week

deploy:
  stage: deploy
  dependencies:
    - build
  script:
    - echo "Deploying..."
    - cp -r dist/* /var/www/html/

七、CI/CD最佳实践

  • 快速反馈:测试要在几分钟内完成,给开发者快速反馈
  • 失败报警:配置Pipeline失败时发送邮件或Slack通知
  • 代码质量:加入代码质量检查(SonarQube)
  • 安全扫描:加入容器安全扫描(Trivy)
  • 回滚能力:保留历史版本,支持快速回滚

八、常见问题

Q:Runner一直处于pending状态怎么办?
A:检查Runner是否注册成功,检查Runner标签是否与Job的tags匹配。

Q:Pipeline一直卡住怎么办?
A:检查前一个Stage是否失败,查看Job日志排查问题。

Q:如何回滚到上一个版本?
A:在GitLab UI中找到上一个成功的Pipeline,重新部署对应版本。

Q:可以部署到多台服务器吗?
A:可以。修改deploy脚本,循环部署到多台服务器。

总结

GitLab CI/CD让代码部署自动化:配置.gitlab-ci.yml,定义Pipeline的Stage和Job,Runner自动执行构建、测试、部署。多环境部署、缓存、Artifact等高级特性让CI/CD更高效。掌握GitLab CI/CD,部署效率提升10倍。

瀚煜云提供GitLab CI/CD配置及DevOps咨询服务。

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容