我已经使用Jenkins进行自动化(在客户环境中)有一段时间了,有以下使用情况。
- 持续部署
- 经常性的网络和API验证
- API预热
持续部署
这一直是主要的用例,旧的部署方式主要是手工作业,要避免所有的人为错误是很有挑战性的。
在部署过程中,可以有以下动作。
- 从资源库获取源代码
- 编译和链接(对于某些编程语言)。
- 文件复制
- 改变配置(取决于目的地或构建)。
- 重新启动一些服务
- …
我对Jenkins项目部署的设置
首先,在常规部分,我设置了一些参数,比如。
- 选择的git标签
- 要使用的登录和目标服务器
- 要部署到目标服务器的文件。
- …

对于源代码管理,我们将重新使用定义的git标签参数(它将以下拉列表的形式呈现,用户可以从中选择)。

最后的主要步骤是运行一个脚本(它包含在源代码中,但人们也可以直接在这里写脚本)。

部署的脚本逻辑如下。

该脚本执行了几个任务。
- 管理目标服务器文件系统(创建文件夹
- 管理配置(使用secure-env来加密源文件中的.env文件
- 复制文件(当Jenkins准备源文件并在Jenkins服务器上运行脚本时,它需要将文件复制到目标服务器上
- 复制后的动作--用PM2运行服务
用参数运行这个Jenkins项目。

引入Jenkins管道项目
鉴于上面定义的Jenkins项目是参数化的,所以如果有多个目标服务器,我们就需要选择不同的服务器再次运行同一个项目(这是另一个人为错误的来源)。
因此,我如何使用Jenkins来实现自动化是通过管道项目。

创建一个Jenkins流水线项目
当配置一个管道时,我们的重点是在管道部分,该部分允许我们使用 "管道脚本 "来定义要做的事情。

下面有一个方便的链接,叫做 "管道语法",它允许我们生成必要的脚本。


复制生成的脚本并粘贴到前一屏幕的管道部分。因此,我所做的是准备多个具有不同参数(例如目标服务器)的 "构建工作 "脚本
网络检查
我的另一个用例是与网络团队合作,检查服务器之间的网络连接。
首先,我定义了一个多行字符串参数,如下所示。

该参数的模式是 "标签|主机名或IP|端口"
脚本将执行。
- 在第一行设置+xe是为了不在控制台结果中打印正在执行的那一行,并允许脚本继续运行,即使有错误。
- 通过打破web_servers参数中定义的值,建立一个服务器阵列(逗号分隔)。
- 将内部字段分隔符(IFS)改为"/n",将多行参数分解成数组,然后恢复原来的IFS。
- 对于每个web服务器,运行SSH命令来telnet(从每一行中获取主机名/ip和端口

API检查和预热
API检查是类似的,但不是用ssh命令中的telnet运行,而是用curl。
一个问题是curl有时对标准开关的容忍度较高(例如证书错误),而且结果与编程语言库(例如axios)不同。
对于热身方案,我的用例是处理IIS的空闲超时(20分钟),因此我将运行一个定期的作业来curl到API端点,为了在Jenkins中配置定期运行,我们可以在构建触发器部分配置构建周期。

该计划遵循cron调度模式--试试这个来帮助你建立模式:crontab.guru/[或 freeformatter.com/cron-expres…](freeformatter.com/cron-expres…)
结论
Jenkins的用途比我最初预计的要多得多,但至少我觉得上述用例涵盖了很多需要定期运行的部署和支持任务,尽管脚本和作业的构建需要时间,但当我多次使用它时,会得到很好的回报。
我最近使用的Jenkins自动化最初发表在Geek Culture上,在Medium上,人们通过强调和回应这个故事继续对话。