持续集成/持续交付|CI/CD 随笔

2020年12月13日 0 条评论 772 次阅读 0 人点赞

一、简要概述

一提起CI/CD,国内开发猿第一个想到的就是jenkins。

大致流程如下:

  1. 本地代码推送至Github
  2. Github监听到推送事件后触发 webhook,请求开发猿们自己搭建的 jenkins 平台
  3. jenkins 平台收到请求后自动拉取代码,开始构建。

jenkins 构建后的产物可以是二进制可执行文件,也可以是 Docker 镜像。当然也可以是源码形式。

例如:Golang构建完就可以是可执行的二进制文件、PHP就可以直接是以源码的形式、如果你用 Docker 也可以构建为镜像的形式。

通过 jenkinsfile 的编写,我们可以控制构建时的每个生命周期。

例如:构建前、构建中、构建后、构建失败时。

我们可以自行编写 Jenkinsfile 代码控制每一步构建的流程。比如构建失败时,可以发一封邮件通知开发人员。

这些构建完后的产物,我们称为构建产物。可以归档到制品库中

如何理解制品库这个名词呢?

例如当我们构建好 docker 镜像后推送至容器镜像服务平台,则这个平台就是一个制品库,它管理着你每次构建的产物。(这里我推荐阿里镜像容器服务)

当你推送到容器镜像服务平台后,也可以配置该平台上的webhook。它触发事件后会通知你的应用程序拉取刚推送的镜像。实现持续部署的功能。

二、实操

介绍了那么多,其实我并不喜欢 jenkins 平台,因为人都有惰性,它配置太过复杂并且需要下载太多插件。如果抛开公司需求,单纯只面对于个人开发者来说,部署一个jenkins,比较消耗个人服务器资源。

因此我更热爱直接使用别人现成的服务。(例如:腾讯的 coding 平台、阿里的容器镜像服务)

这里我拿阿里云的举例

如上图所示:当你绑定了代码源后,创建仓库即可选择自己的代码托管平台的仓库。每当有推送的指定事件后就将通知阿里云,事件类型可以自行定义,按照开发标准来说一般都是项目在 github 上打 Tag 时会触发事件。

选择代码变更自动构建镜像

这里的前提是你必须保证你的项目代码中拥有 Dockerfile 文件。

例如我是Golang项目,它的 Dockerfile 如下所示

因此,当你推送代码时,阿里云会自动根据你编写的 Dockerfile 构建镜像,并放入阿里云镜像仓库中。

最后配置触发器

当构建完成后,触发器会通知你的应用程序,并且发送构建镜像的Tag。你的应用程序可以拉取最新镜像,实现持续部署功能。

完。

兰陵美酒郁金香

大道至简 Simplicity is the ultimate form of sophistication.

文章评论(0)

你必须 登录 才能发表评论