Jenkins 中文站点介绍:Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。
该章节说一下 win 10 下的安装
下载地址:Download and deploy。这里选择
Windows 环境安装一般都没有什么难度,不过有几点需要注意一下
如下图所示,这个环节有两个选项,查看其它的教程时,基本上都是选择第二个,咱也随大流了,选择的是:Run service as local or domain user 。选择之后会让你输入用户名和密码(电脑登录账号),之后需要测试用户的有效性(是否作为服务登录)。
# Win + R 打开 运行 # 进入本地安全策略 secpol.msc
这个挺不错,因为之前安装过JDK,这里就直接弄过来了
安装结束之后,初次访问会有一些初始化配置
小白一个,这里安装推荐的插件
这里还是有点懵逼的,查了一下,基本上都说:直接下一步吧!
配置完成之后,就进入了首页>控制台了
看到上面的图片你可能也有和我一样的问题:这中英文混杂,真别扭啊!
作为一个地地道道的中国人,汉化不完整看着真费劲啊,必须得搞一下。参考 解决Jenkins部分汉化、汉化不全有效办法_jenkins汉化不完全-CSDN博客
-Duser.language=C.UTF-8
当时网上查看
后面需要配合
因为工作的原因,一直在用 SVN ,所以先拿他下手。
SVN 仓储已经准备好,你可以查看这里:SVN(Subversion、TortoiseSVN) - xiaodu114.github.io。用的就是最初导入的两个示例项目:基于 fastapi 的 python 项目和前端类库 a2bei4 项目
这,这,这很重要。
REPOS="$1" REV="$2" TXN_NAME="$3" LOG_FILE="/home/ddz/1-code/svn/repository/log/post-commit.log" # 定义日志文件路径 # 记录提交信息到日志文件 echo "》》》》》》监听到提交,信息如下:" >> $LOG_FILE echo "REPOS: $REPOS" >> $LOG_FILE echo "REV: $REV" >> $LOG_FILE echo "TXN_NAME: $TXN_NAME" >> $LOG_FILE echo " " >> $LOG_FILE # 遍历提交的文件列表并记录到日志文件 echo "变化的文件如下:" >> $LOG_FILE svnlook changed -r $REV $REPOS >> $LOG_FILE echo " " >> $LOG_FILE # 检查本次提交中是否包含 vue 项目的变更 if svnlook changed -r $REV $REPOS | grep 'web/a2bei4'; then # 使用 cURL 发送 GET 请求通知 Jenkins 构建 a2bei4 项目 echo "Calling Jenkins to build a2bei4..." >> $LOG_FILE curl -u admin:admin666 -X GET http://192.168.xxx.xxx:9966/job/task-001/build?token=user2-a2bei4 >> $LOG_FILE fi echo " " >> $LOG_FILE echo " " >> $LOG_FILE echo " " >> $LOG_FILE
你应该已经发现,这里通知
如下图中的注释,这里分别在两个文件夹都拉去了上面的仓储,来模拟两个用户,一个用户修改并签入,另一个用户则通过 SVN 的 post-commit 通知
任务的相关配置从
这里选用的是
还需要提供
这里选择的是触发远程构建,需要设置一个身份验证令牌,这里是
该环节这里直接跳过了
这里选择的是
# 1、进入项目目录 cd a2bei4 # 2、判断 package.json 是否修改 # SVN 版本号 $revision = $ENV:SVN_REVISION # 时间戳 $xmlFileName = (([DateTime]::Now.ToUniversalTime().Ticks - 621355968000000000)/10000).tostring().Substring(0,13) + ".xml" # 将最新版本的详细日志信息写入到 *.xml 文件 # svn log -r $revision --verbose --xml >> $xmlFileName # 添加 -q 参数,会在上面的基础上排除提交信息。提交信息如果包含中文时,写入 xml 时可能会出现乱码 svn log -r $revision --verbose --xml -q >> $xmlFileName # 读取 *.xml 文件内容 $xmlContent = Get-Content -Path $xmlFileName -Raw $PACKAGE_JSON_CHANGED = $false if(![String]::IsNullOrEmpty($xmlContent)){ # 使用[xml]类型转换来将字符串转换为XML对象 $xml = [xml]$xmlContent # 使用Select-Xml来选择所有的<path>元素 $paths = $xml.SelectNodes('//log/logentry/paths/path') # 遍历所有<path>元素并输出它们的值 foreach ($path in $paths) { if ($path.InnerText.ToLower().EndsWith("/a2bei4/package.json")) { $PACKAGE_JSON_CHANGED = $true break } } } # 删除 *.xml 文件 Remove-Item -Path $xmlFileName -Force # 3、根据 package.json 是否被修改执行相应操作 if ($PACKAGE_JSON_CHANGED) { Write-Host '》》》》》》 package.json has changed. Cleaning up...' if (Test-Path -Path 'node_modules') { Write-Host '》》》》》》 node_modules exists. delete node_modules...' Remove-Item -Path node_modules -Recurse -Force } Write-Host '》》》》》》 Installing dependencies...' npm install Write-Host '》》》》》》 build project...' npm run c } else { Write-Host '》》》》》》 package.json has not changed.' if (Test-Path -Path 'node_modules') { Write-Host '》》》》》》 node_modules exists. build project...' npm run c } else { Write-Host '》》》》》》 node_modules does not exist. Installing dependencies...' npm install Write-Host '》》》》》》 build project...' npm run c } } Write-Host 'Successfully ...'
该环节这里直接跳过了
“触发远程构建”配置可知,就是发个 HTTP 请求就搞定了,还是个 GET 请求,直接用浏览器试一下
下面是构建成功的截图
下面是构建日志的截图
如果不是
这里更新一下
如果更新文件中不包含 package.json,此时不需要重新安装。这次签入测试懵逼了,提交信息中写了中文注释,
乱码和
查了一下,没有找到写入xml文件时乱码的有效解决办法。如果有哪位朋友知道,请不吝赐教,谢谢。于是想曲线救国,两种解决办法:一是提交信息不包含中文;二是写入日志的时候不包含提交信息。第一个就算了,英文有点不好意思说,难道用拼音,哈哈,不错的主意。你还真别说,第二种真的有参数可以控制:
上面的问题解决了,但是又想到了一种情况:如果文件路径中包含中文,那岂不是还是不行……是的,我验证了一下,确实是乱码。真的凌乱了,曲线救国还是不行啊!还得是正途啊!在哪里呢?