Appearance
DevOps工作流

首先我们这个容器化的DevOps工作流中会用到
5个工具:Docker、Jenkins、Harbor、Portainer、Gitee(码云)
4个环境:本地91、阿里云、本地测试环境、远程生产环境
Docker:用来打包镜像、上传镜像、运行镜像生成容器
Jenkins:执行CI/CD流水线,例如:测试、编译、构建、部署等阶段
Harbor:私有镜像仓库,用来存放项目打包的镜像
Portainer:Docker的图形化管理共工具,可用来管理各个主机上Docker的镜像和容器
Gitee:码云代码仓库托管,可提供webhook来触发Jenkins执行流水线
大致流程:
首先我们需要在Jenkins上做好相应的配置,Jenkins安装在91环境上的,会用到宿主机91的Docker,我们在项目的代码中编写Jenkins流水线文件Jenkinsfile,并放在项目根目录。
当我们代码提交到Gitee上时,会触发Gitee的webhook,然后Jenkins接收到webhook请求,会从码云上拉取代码,当检测到根目录存在Jenkinsfile文件,便会执行Jenkinsfile中的流水线,完成一系列的任务。
Jenkins在Build&Push阶段会使用项目中的Dockerfile文件构建出镜像,并给构建出的镜像打上latest标签,然后上传这两份镜像到阿里云的Harbor上。
Jenkins在Deploy阶段会根据流水线所处的分支,通过SSH连接到相应的主机上,然后执行主机上的Docker命令,先删除现有的容器,再从Harbor上拉取最新的镜像,重新运行镜像生成容器,并清理none镜像(没被标记且没被其它任何镜像引用的镜像)。
这时相应环境的Docker容器就是最新的镜像生成的容器,当我们想恢复到之前版本的镜像,只需要到Harbor上将当前latest标签下的镜像删掉,在我们想要恢复的版本镜像上重新打上latest标签,再回到Jenkins上重新运行下Delpoy阶段即可。
当我们有一些紧急的配置需要变更时,可以通过Portainer来进入到相应的主机的Docker容器中,去修改这个配置文件,然后执行重启容器的命令。