文章最后更新时间:
手动部署效率低、容易出错。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咨询服务。

















暂无评论内容