这里我要实现的目标是:当有人push代码到git server中(这里我使用的git server是Gogs,需要给Gogs设置一个Webhook,如下图所示,需要注意的是设置的密钥文本要和在Pipeline中填写的一致,否则Jenkins无法正确接收Web钩子),git server会触发一个webhook发送一个post的请求给CI server,CI server会触发Pipeline任务的构建,一路pull代码+编译+单元测试。
(2)持续发布:实现编译+发布到具体的测试环境
由于在开发阶段,我不需要每次Push都进行发布,因此我这里设置的是手动在Jenkins中触发发布任务来实现自动化发布。
3.2 全局设置首先,肯定是Jenkins的插件安装了。
(1)Generic WebHook Trigger => 触发WebHook必备
(2)Gogs Plugin => 因为我使用的Git Server是Gogs搭建的
(3)MSBuild Plugin => 进行sln、csproj项目文件的编译
(4)MSTest & xUnit => 进行基于MSTest或基于xUnit的单元测试
(5)Nuget Plugin => 拉取Nuget包必备
(6)Pipeline => 实现Pipeline任务必备,建议将Pipeline相关插件都安装上
(7)Powershell Plugin => 如果你的CI服务器是基于Windows的,那么安装一下Powershell插件来执行命令吧
(8)Publish Over SSH => 远程发布Release必备
(9)WallDisplay => 电视投屏构建任务列表必备
其次,为了提示邮件,也要Email插件(Email Extension)的支持,并进行以下配置:
(1)第一处:Jenkins Location
(2)第二处:Email扩展插件全局变量设置
这里主要是需要设置Subject和Content,就可以在各个Pipeline中使用了。因此,这里贴出我的Default Content内容:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title> </head> <body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0"> <table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Microsoft YaHei, Tahoma, Arial, Helvetica"> <tr> <td>各位同事,大家好,以下为 ${PROJECT_NAME } 构建任务信息</td> </tr> <tr> <td><br /> <b style="font-weight:bold; color:#66cc00">构建信息</b> <hr size="2" width="100%" align="center" /></td> </tr> <tr> <td> <ul> <li>任务名称 : ${PROJECT_NAME}</li> <li>构建编号 : 第${BUILD_NUMBER}次构建</li> <li>触发原因: ${CAUSE}</li> <li>构建状态: <span style="font-weight:bold; color:#FF0000">${BUILD_STATUS}</span></li> <li>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li> <li>构建 Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li> <li>工作目录 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li> <li>项目 Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li> </ul> </td> </tr> </table> </body> </html>
为了能够发给更多的人,建议勾选以上两个选项。
这里是Email通知必填的SMTP服务器配置。
最后,是SSH服务器的声明,指定可以进行SSH发布的服务器有哪些,IP又是多少:
3.3 新增Pipeline脚本(1)持续集成Pipeline
首先,填写Webhook的密钥文本:
其次,Build Triggers的时机选择“Build when a change is pushed to Gogs”,即有人push代码到仓库就触发。当然,这里需要提前在Gogs设置Webhook。
其次,编写Pipeline脚本,各个Stage写清楚职责:
具体的Pipeline脚本在下边: