【译】使用Jenkins自动化

183 阅读4分钟

我已经使用Jenkins进行自动化(在客户环境中)有一段时间了,有以下使用情况。

  1. 持续部署
  2. 经常性的网络和API验证
  3. API预热

持续部署

这一直是主要的用例,旧的部署方式主要是手工作业,要避免所有的人为错误是很有挑战性的。

在部署过程中,可以有以下动作。

  1. 从资源库获取源代码
  2. 编译和链接(对于某些编程语言)。
  3. 文件复制
  4. 改变配置(取决于目的地或构建)。
  5. 重新启动一些服务

我对Jenkins项目部署的设置

首先,在常规部分,我设置了一些参数,比如。

  1. 选择的git标签
  2. 要使用的登录和目标服务器
  3. 要部署到目标服务器的文件。

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

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

部署的脚本逻辑如下。

该脚本执行了几个任务。

  1. 管理目标服务器文件系统(创建文件夹
  2. 管理配置(使用secure-env来加密源文件中的.env文件
  3. 复制文件(当Jenkins准备源文件并在Jenkins服务器上运行脚本时,它需要将文件复制到目标服务器上
  4. 复制后的动作--用PM2运行服务

用参数运行这个Jenkins项目。

引入Jenkins管道项目

鉴于上面定义的Jenkins项目是参数化的,所以如果有多个目标服务器,我们就需要选择不同的服务器再次运行同一个项目(这是另一个人为错误的来源)。

因此,我如何使用Jenkins来实现自动化是通过管道项目。

创建一个Jenkins流水线项目

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

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

复制生成的脚本并粘贴到前一屏幕的管道部分。因此,我所做的是准备多个具有不同参数(例如目标服务器)的 "构建工作 "脚本

网络检查

我的另一个用例是与网络团队合作,检查服务器之间的网络连接。

首先,我定义了一个多行字符串参数,如下所示。

该参数的模式是 "标签|主机名或IP|端口"

脚本将执行。

  1. 在第一行设置+xe是为了不在控制台结果中打印正在执行的那一行,并允许脚本继续运行,即使有错误。
  2. 通过打破web_servers参数中定义的值,建立一个服务器阵列(逗号分隔)。
  3. 将内部字段分隔符(IFS)改为"/n",将多行参数分解成数组,然后恢复原来的IFS。
  4. 对于每个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上,人们通过强调和回应这个故事继续对话。