从零到一,构建你的持续交付流程(三):搭建基于Jenkins+Docker的持续交付环境

2021-10-19 14:11:52 浏览数 (1)

工欲善其事,必先利其器。

对于持续交付也是如此。这一篇我着重讲下,搭建前面我说的这样一个持续交付,要用到哪些工具及搭建。

这是从零到一,构建你的持续交付流程的第三篇,本系列其它文章为:

  1. 从零到一,构建你的持续交付流程(一):一个持续交付流程的构思
  2. 从零到一,构建你的持续交付流程(二):好的工程实践是必要的前提

一)

整体上来说,我的这个实现是基于Jenkins Pipeline Docker来构建的。

这不代表只能这样。

我们一定要学会触类旁通,也就是知其然,知其所有然。持续交付关键在于把需要手工操作的东西自动化,流水线化。只要能支持这个过程的工具或技术都可以使用,并无特别的限定。

举例说明,

微言码道的官网https://taoofcoding.tech的部署与更新,我是用Shell来完成的。

代码语言:javascript复制
#!/bin/sh
git pull --ff-only && echo "更新代码成功" || exit 1
npm install && echo "npm install成功" || exit 1
npm run build && echo "npm build成功" || exit 1
cd ./public
zip -r ./taoofcode_tech.zip * && echo "生产包构建成功" || exit 1
scp ./taoofcode_tech.zip root@taoofcoding.tech:/usr/share/nginx && echo "上传到远程服务器成功" ||  exit 1
rm ./taoofcode_tech.zip && echo "删除本地构建包" || exit 1
ssh root@taoofcoding.tech 'bash -s' < ../auto_deploy.sh && echo "远程部署成功" || exit 1

也就是每次修改完,我只要执行这个Shell脚本就自动完成部署与更新了。它也分为很多步骤,比如构建,打包,上传及远程解压等。

事实上,我正再考虑把这个过程迁移到Github Action中去,这样就少了自己执行脚本这个步骤了。

但我完全没有想过把这个过程使用Jenkins Pipeline或结合Docker来完成,这样就复杂化了。

因此,记住技术只是工具,选择最合适的方式就好。

二)

我们再来看下这个交付流程图

如果要满足这么一个流程,至少以下工具是必不可少的。

持续交付相关环境最好搭建在专门的服务器,或开发或测试环境服务器上为宜(基本24小时不停机的那种)。不要搭建在个人电脑上。

简单申明下: 这个系列不是技术教程,更多的偏向理论,我不会就各种工具一步一步教你如何下载与安装,这不是我这个系列的目的。 后续会出专门的教程来更详细的讲解它们。

1. Docker

我们需要Docker,主要用于两个目的,其中一个可选,一个必选。

可选目的:

减少对环境的特定工具版本的依赖,比如JDK版本,Node版本等。因为Jenkins Pipeline是支持Docker的,意味着你可以在Docker环境内去编译你的源码,单元测试,构建二进制包等。

必选目的:

我们用Docker来管理我们的服务,比如重启,停止或启动。这会极大的简化对服务的管理。

它还有一个额外的优势,当你的持续交付是单服务时,你直接用docker能管理好,如果是多服务,比如后台服务 数据库 前端页面,你可以用docker compose来管理。而分布式部署的多服务,可以基于docker swam或k8s来管理。

代码语言:javascript复制
# 启动服务
docker start XXService
# 停止服务
docker stop XXService
# 多服务启动
docker-compose up -d

2. Jenkins

我们用开源的Jenkins来做持续交付。

安装它的方式有两种,一种是基于Docker安装,一种是将Docker安装在本地。

如果需要安装在本地也行,从官网下载Jar包,安装JDK,直接运行。

从简单方便的方式来看,我更喜欢直接用docker来安装。

代码语言:javascript复制
docker run --name=jenkins -d -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts

如果有Docker环境,你只需要上述这个命令就好了。

启动后,注意使用docker logs查看启动的过程,第一次会在console中初始密码。初始化时需要这个。

代码语言:javascript复制
#查看docker输出日志
docker logs -f jenins

你应该会看到类似的输出

代码语言:javascript复制
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
f9b3befb252a46ad8cbdbea4292b3dbf
This may also be found at: /var/jenkins_home/secrets/initialAdminPassword

然后访问http://127.0.0.1:8080进行初始化。

初始化过程的插件选推荐的就好。至于管理员用户名及密码,按自己喜好填写。

安装docker pipeline插件

默认推荐的插件,不包含docker pipeline插件,由于我们可能在pipeline中使用到docker,所以我们需要安装这个插件

三)

其实最核心的就是Docker Jenkins这两个就足够了。

很多人会觉得奇怪,难道不需要安装node支持前端构建,或JDK支持后端构建。

当然,你安装node或JDK也可以,不安装也行。

因为我们完全可以基于Docker来构建我们的项目,也就是本地没有JDK,也能在Docker中去编译运行它。

这一点,我后面会简要说明。

下一篇:从零到一,构建你的持续交付流程(四):利用Docker,将所有服务容器化。

0 人点赞