GitLab CI 示例:Docker 镜像打包发布 & SSH 部署
发表于 2018-11-19
作者: 灼灼团队
本文字数: 1448
阅读时长 ≈ 4.8 分钟

# 目标

当我们 push 代码到 git 仓库时,将项目部署到目标服务器上,具体步骤:

- 基于代码仓库中的 Dockerfile 构建代码镜像
- 将构建的代码镜像推送到我们的私有镜像仓库
- 通过 ssh 连接目标服务器,远程执行部署指令,基于代码镜像启动容器

# 示例代码说明

stages:
  - build
  - deploy

variables:
  TARGET_IMAGE: $REGISTRY_ADDR/maslow/ci-example-app:latest
  DOCKER_DRIVER: overlay2

build:
  image: docker:stable
  stage: build
  script:
    - docker login -u $REGISTRY_USER -p $REGISTRY_PASSWORD $REGISTRY_ADDR
    - docker pull $TARGET_IMAGE || true   # for docker build caching
    - docker build --cache-from $TARGET_IMAGE --tag $TARGET_IMAGE .
    - docker push $TARGET_IMAGE

deploy:
  image: ubuntu:latest
  stage: deploy
  script:
    - 'which ssh-agent || (apt-get update -y && apt-get install openssh-client -y)'
    - eval $(ssh-agent -s)
    - echo "$SERVER_SSH_PRIV_KEY" > deploy.key
    - mkdir -p ~/.ssh
    - chmod 0600 deploy.key
    - ssh-add deploy.key
    - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
    - ssh root@$SERVER_ADDR "docker run -d -P ${TARGET_IMAGE}"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

这段 CI 脚本有两个 stage:

- build  # 根据代码目录下的 Dockerfile 构建镜像,并 push 到镜像仓库
- deploy # 通过 ssh 连接目标服务器,远程执行部署指令

其中用到了一些预定义了一些环境变量:

- REGISTRY_ADDR   # 私有镜像仓库的地址,例如:registry.cn-hangzhou.aliyuncs.com
- REGISTRY_USER   # 私有镜像仓库用户名
- REGISTRY_PASSWORD     # 私有镜像仓库密码
- SERVER_SSH_PRIV_KEY   # 登陆目标服务器的私钥
- SERVER_ADDR           # 目标服务器的地址

预定义的环境变量并不在 .gitlab-ci.yml 中定义,因为它们往往是一些敏感信息,具体的设置方式是提前在 GitLab Web 端代码仓库设置页面填写:Settings > CI/CD > Variables

# 参考链接

  • GitLab Variables: https://docs.gitlab.com/ee/ci/variables/README.html#variables
  • Using SSH keys with GitLab CI/CD: https://docs.gitlab.com/ee/ci/ssh_keys/README.html
  • Building Docker images with GitLab CI/CD: https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#making-docker-in-docker-builds-faster-with-docker-layer-caching
联系我们
联系电话:17681177133
联系邮箱:admin@zhuo-zhuo.com
公司地址:合肥市高新区习友路2666号 (习友路和石莲南路交叉口西北角)二期304室
官网
博客
皖ICP备20009670号-2
合肥灼灼信息技术有限公司 | Copyright © 2020-present zhuo-zhuo.com