工欲善其事,必先利其器。
对于持续交付也是如此。这一篇我着重讲下,搭建前面我说的这样一个持续交付,要用到哪些工具及搭建。
这是从零到一,构建你的持续交付流程的第三篇,本系列其它文章为:
- 从零到一,构建你的持续交付流程(一):一个持续交付流程的构思
- 从零到一,构建你的持续交付流程(二):好的工程实践是必要的前提
一)
整体上来说,我的这个实现是基于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,将所有服务容器化。