GitLab CI/CD 配置解析:auto_server 阶段

这个配置定义了一个名为 auto_server 的 CI/CD 阶段,下面我将详细解释每个部分:

配置详解

1. 阶段定义

stage: auto_server
  • 定义这个作业属于 auto_server 阶段
  • 阶段是 GitLab CI/CD 流水线中的一个逻辑分组

2. 变量定义

variables:
  DOCKER_REGISTRY: 10.90.0.100:5000
  • 设置了一个环境变量 DOCKER_REGISTRY,值为 10.90.0.100:5000
  • 这通常用于指定 Docker 镜像仓库地址

3. 执行器标签

tags:  
  - ssh_96
  • 指定这个作业将在带有 ssh_96 标签的 GitLab Runner 上执行
  • 这通常对应特定的服务器或执行环境

4. 触发条件

only:
  - tags
  • 这个作业只会在有 Git 标签(tag)的提交时触发
  • 例如:git tag -a v1.0 -m "Release v1.0" && git push origin v1.0

5. 脚本内容

script:
  - docker ps -a
  • 实际执行的命令是列出所有 Docker 容器(包括停止的)
  • 这是一个简单的示例,实际中可能会有更复杂的部署脚本

6. 依赖关系

dependencies:
  - build_docker
needs:
  - build_docker
  • dependencies 和 needs 都指定了这个作业依赖于 build_docker 作业
  • dependencies 主要用于传递工件(artifacts)
  • needs 允许作业并行执行(如果可能),而不需要等待整个阶段完成

完整示例场景

假设我们有一个完整的 .gitlab-ci.yml 文件:

stages:
  - build
  - deploy

build_docker:
  stage: build
  script:
    - docker build -t $DOCKER_REGISTRY/myapp:latest .
    - docker push $DOCKER_REGISTRY/myapp:latest
  tags:
    - ssh_96
  only:
    - tags

auto_server:
  stage: deploy
  variables:
    DOCKER_REGISTRY: 10.90.0.100:5000
  tags:  
    - ssh_96
  only:
    - tags
  script:
    - docker pull $DOCKER_REGISTRY/myapp:latest
    - docker stop myapp || true
    - docker rm myapp || true
    - docker run -d --name myapp -p 8080:8080 $DOCKER_REGISTRY/myapp:latest
    - docker ps -a
  dependencies:
    - build_docker
  needs:
    - build_docker

工作流程说明

  1. 开发者创建一个 Git 标签并推送:

    git tag -a v1.2 -m "Release v1.2"
    git push origin v1.2
    
  2. GitLab CI/CD 检测到标签推送,触发流水线

  3. 首先执行 build_docker 作业:

    • 构建 Docker 镜像
    • 将镜像推送到指定的 registry (10.90.0.100:5000)
  4. 然后执行 auto_server 作业:

    • 从 registry 拉取最新镜像
    • 停止并移除现有的容器(如果存在)
    • 使用新镜像启动容器
    • 最后列出所有容器确认部署状态

实际应用场景

这种配置非常适合自动化部署场景,例如:

  • 当需要发布新版本时,只需打标签即可触发全自动部署
  • 在测试环境中快速部署最新构建
  • 确保部署过程可重复且一致

注意事项:

  1. 确保 Runner 有足够的 Docker 权限
  2. 生产环境部署可能需要额外的验证步骤
  3. 考虑添加回滚机制
  4. 可能需要处理敏感数据(如密码)更安全的方式
Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐