GitLab CI/CD流水线搭建:Docker自动化构建与部署实践

DevOps实践里,CI/CD流水线是把代码提交到生产环境之间路程缩短的最直接工具。GitLab CI内置在GitLab平台内,不依赖额外部署的Jenkins服务,写一份.gitlab-ci.yml就能把测试、镜像构建、服务器部署串起来。本文给出一套可直接落地的Docker自动化部署流水线。

GitLab Runner注册与部署

Runner是流水线的执行者,用Docker executor方式部署,让每次任务都跑在干净镜像里。

# 安装runner(Debian/Ubuntu)
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash
sudo apt-get install gitlab-runner

# 注册runner
sudo gitlab-runner register \
  --url https://gitlab.example.com \
  --token GLRT-xxxx \
  --executor docker \
  --docker-image docker:latest

runner注册token在项目或群组的Settings->CI/CD->Runners里获取。注册完成后,仓库里推送.gitlab-ci.yml即可触发流水线。

gitlab-ci.yml流水线编排

流水线按stage组织:test跑单元测试,build构建并推送镜像,deploy发布到服务器。

stages:
  - test
  - build
  - deploy

variables:
  IMAGE_TAG: $CI_COMMIT_SHORT_SHA

test:
  stage: test
  image: python:3.11
  script:
    - pip install -r requirements.txt
    - pytest -v

build:
  stage: build
  image: docker:24
  services:
    - docker:24-dind
  script:
    - docker build -t registry.example.com/app:$IMAGE_TAG .
    - echo "$REGISTRY_PASSWORD" | docker login registry.example.com -u "$REGISTRY_USER" --password-stdin
    - docker push registry.example.com/app:$IMAGE_TAG
  only:
    - main

deploy:
  stage: deploy
  image: alpine:3
  before_script:
    - apk add --no-cache openssh-client
  script:
    - ssh -o StrictHostKeyChecking=no deploy@server "cd /srv/app && docker compose pull app && docker compose up -d app"
  environment:
    name: production
  only:
    - main

密钥与敏感信息管理

流水线里的密码统一走GitLab CI/CD Variables,禁止写进仓库。注册为Protected变量的值只对受保护分支生效。

# Settings -> CI/CD -> Variables 添加:
# REGISTRY_USER     protected=true
# REGISTRY_PASSWORD protected=true, masked=true

镜像构建加速与缓存

Kaniko缓存配合Dockerfile分层缓存能明显缩短构建时间,适合无特权容器环境。

build:
  stage: build
  image: gcr.io/kaniko-project/executor:latest
  script:
    - /kaniko/executor --context . --dockerfile Dockerfile \
        --destination registry.example.com/app:$IMAGE_TAG \
        --cache=true --cache-repo=registry.example.com/cache
  only:
    - main

部署回滚与发布策略

镜像标签固定用Git提交短哈希,保证每次发布可追溯。线上出问题时直接回滚到上一个标签。

ssh deploy@server "cd /srv/app && docker compose pull app && docker compose up -d app"
# 回滚到旧版本
ssh deploy@server "cd /srv/app && IMAGE_TAG=旧标签 docker compose up -d app"

实际项目中把Dockerfile分层做细、测试镜像做小,CI耗时和失败率一起下降。流水线稳定后,发布动作就变成一次merge request评审,部署结果由流水线保证。

原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/gitlabcicd-liu-shui-xian-da-jian-docker-zi-dong-hua-gou/

(0)
小编小编
上一篇 5小时前
下一篇 5小时前

相关推荐