自动化Docker镜像构建与部署流水线
·
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
工作流程说明
-
开发者创建一个 Git 标签并推送:
git tag -a v1.2 -m "Release v1.2" git push origin v1.2 -
GitLab CI/CD 检测到标签推送,触发流水线
-
首先执行
build_docker作业:- 构建 Docker 镜像
- 将镜像推送到指定的 registry (10.90.0.100:5000)
-
然后执行
auto_server作业:- 从 registry 拉取最新镜像
- 停止并移除现有的容器(如果存在)
- 使用新镜像启动容器
- 最后列出所有容器确认部署状态
实际应用场景
这种配置非常适合自动化部署场景,例如:
- 当需要发布新版本时,只需打标签即可触发全自动部署
- 在测试环境中快速部署最新构建
- 确保部署过程可重复且一致
注意事项:
- 确保 Runner 有足够的 Docker 权限
- 生产环境部署可能需要额外的验证步骤
- 考虑添加回滚机制
- 可能需要处理敏感数据(如密码)更安全的方式
更多推荐



所有评论(0)