Skip to content

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容器中,去修改这个配置文件,然后执行重启容器的命令。