PS: Docker Hub 访问会很慢。
Secret 配置账号密码刚才构建镜像时在 .drone.yml 文件使用了明文账号密码,这样肯定是不允许的,可以使用 Secret 配置这样的敏感数据。
kind: pipeline # 定义一个管道 type: docker # 定义管道类型 name: build # 定义管道名称 - name: build-image # 步骤名称 image: plugins/docker # 使用镜像 depends_on: [build-project] # 依赖步骤 settings: # 当前设置 username: # 账号名称 from_secret: docker_username password: # 账号密码 from_secret: docker_password dockerfile: deploy/Dockerfile # Dockerfile地址, 注意是相对地址 repo: yxs970707/deploy-web-demo # 镜像名称 tags: # 镜像标签 - latest - 1.0.2使用Secret时,需要使用 from_secret 属性设置。
根据 package.json 生成 Tags打包镜像时设置的镜像版本号,是直接设置的固定数值,这样每次更新都要重新设置新版本号,也是一个繁琐的操作。
Drone 中可以使用变量设置, 并且内置了许多变量,例如: DRONE_TAG。但是个人感觉这些变量并不太好用。
我想要的效果是根据 package.json 文件 version 属性 设置镜像版本。这样管理起来比较方便。
后查询文档发现 plugins/docker 镜像支持读取项目根目录下 .tags 文件进行设置版本号
有一种解决方案,将package.json 文件 version 属性写入到 .tags 文件。
https://discourse.drone.io/t/using-custom-generated-tags-for-docker-images/1918/2
虽然感觉社区内会有这样功能的镜像插件,
但是查找起来浪费时间,于是自己写了一个简单的插件:https://github.com/yanzhangshuai/drone-web-tags
使用起来也很简单,并且同时支持设置其它 Tags。
steps: - name: build-project # 步骤名称 image: node:16.13.2 # 使用镜像 depends_on: [clone] # 依赖的步骤, volumes: # 挂载数据卷 - name: node_modules # 数据卷名称 path: /drone/src/node_modules # 容器内目录 commands: # 执行命令 - npm config set registry https://registry.npm.taobao.org # 切换淘宝镜像 - npm install # 安装node_modules包 - npm run build # 执行编译 - name: build-tags image: yxs970707/drone-web-tags # 使用镜像 depends_on: [clone] # 依赖的步骤, settings: tags: - latest # 设置其它tags, latest - name: build-image # 步骤名称 image: plugins/docker # 使用镜像 depends_on: [build-tags, build-project] # 依赖步骤 settings: # 当前设置 username: # 账号名称 from_secret: docker_username password: # 账号密码 from_secret: docker_password dockerfile: deploy/Dockerfile # Dockerfile地址, 注意是相对地址 repo: yxs970707/deploy-web-demo # 镜像名称 deploy 阶段将镜像推送到镜像仓库后,持续部署的第二阶段就是在服务器更新部署。
第二阶段虽然细分了许多操作,但关键是远程连接服务器。所以为了简单直接将这些操作都配置到一个 步骤(step)
第二阶段 管道(Pipeline) 名字为 deploy
注意:管道(Pipeline) 之间需要使用 --- 相隔开
deploy 管道(Pipeline)需要在 build 管道(Pipeline)执行完毕后才执行。
并且 deploy 管道(Pipeline) 可以禁用代码拉取
kind: pipeline type: docker name: deploy depends_on: # 依赖build管道 - build clone: disable: true # 禁用拉取 SSH 连接并部署之前说过,Drone 提供了多种 Runner(执行器) 和 管道(Pipeline) 类型, 但某些类型可以使用容器化统一化管理。
Drone 社区中提供了 SSH 连接镜像插件, appleboy/drone-ssh。
配置此步骤前,需要先改动 之前 web 项目的 Docker Compose 文件
配置中使用了具体 Tag 镜像。不过服务器部署时并不需要清楚当前是什么版本服务,直接部署 最新版本(latest) 就行。