目录

* Jenkins持续集成学习-Windows环境进行.Net开发4
<https://www.cnblogs.com/Jack-Blog/p/10346032.html#jenkins持续集成学习-windows环境进行.net开发4>
* 目录 <https://www.cnblogs.com/Jack-Blog/p/10346032.html#目录>
* 前言 <https://www.cnblogs.com/Jack-Blog/p/10346032.html#前言>
* 目标 <https://www.cnblogs.com/Jack-Blog/p/10346032.html#目标>
* Github持续集成 <https://www.cnblogs.com/Jack-Blog/p/10346032.html#github持续集成>
* 提交代码到Github <https://www.cnblogs.com/Jack-Blog/p/10346032.html#提交代码到github>
* 从Github更新代码 <https://www.cnblogs.com/Jack-Blog/p/10346032.html#从github更新代码>
* git上显示构建状态 <https://www.cnblogs.com/Jack-Blog/p/10346032.html#git上显示构建状态>
* 自动触发构建 <https://www.cnblogs.com/Jack-Blog/p/10346032.html#自动触发构建>
* Gitlab持续集成 <https://www.cnblogs.com/Jack-Blog/p/10346032.html#gitlab持续集成>
* 安装插件 <https://www.cnblogs.com/Jack-Blog/p/10346032.html#安装插件>
* 配置Gitlab账号 <https://www.cnblogs.com/Jack-Blog/p/10346032.html#配置gitlab账号>
* 配置Git地址 <https://www.cnblogs.com/Jack-Blog/p/10346032.html#配置git地址>
* 配置钩子 <https://www.cnblogs.com/Jack-Blog/p/10346032.html#配置钩子>
* 通知Gitlab状态 <https://www.cnblogs.com/Jack-Blog/p/10346032.html#通知gitlab状态>
* 结语 <https://www.cnblogs.com/Jack-Blog/p/10346032.html#结语>
* 参考文档 <https://www.cnblogs.com/Jack-Blog/p/10346032.html#参考文档>
Jenkins持续集成学习-Windows环境进行.Net开发4

目录

Jenkins持续集成学习-Windows环境进行.Net开发1
<https://www.cnblogs.com/Jack-Blog/p/10291612.html>
Jenkins持续集成学习-Windows环境进行.Net开发2
<https://www.cnblogs.com/Jack-Blog/p/10316116.html>
Jenkins持续集成学习-Windows环境进行.Net开发3
<https://www.cnblogs.com/Jack-Blog/p/10331263.html>
Jenkins持续集成学习-Windows环境进行.Net开发4
<https://www.cnblogs.com/Jack-Blog/p/10346032.html>
Jenkins持续集成学习-搭建jenkins问题汇总 <https://www.cnblogs.com/Jack-Blog/p/10439325.html>

前言

前面三篇介绍了使用SVN的持续集成,本篇就来学习如何使用git进行持续集成。

目标

探究 .net + git + jenkins方案的持续集成。

前面3篇文章总结的最终流程如下。


graph LR 获取代码 --> 编码 编码 --> 提交代码 提交代码 --> |自动构建| 编译程序集 编译程序集 --> 编译单元测试程序集
编译单元测试程序集 --> |通过| 执行单元测试 编译单元测试程序集 --> |不通过| 失败 执行单元测试 --> |通过| 创建nuget包
创建nuget包 --> 上传nuget包 执行单元测试 --> |不通过| 失败 上传nuget包 --> 清理编译文件夹 失败 --> 清理编译文件夹
失败 -.-> 获取代码
我们需要修改3个方面。

* 代码提交到Git上
* 提交到Git上自动触发构建
* 从Git上更新代码
Github持续集成

Jenkins需要先需要安装Github相关插件Github plugin。

提交代码到Github

首先新建一个git仓库




提交前需要把obj目录下的project.assets.json排出忽略,obj其他的文件添加忽略。

关于project.assets.json的作用可以查看Jenkins持续集成学习-Windows环境进行.Net开发2
<https://www.cnblogs.com/Jack-Blog/p/10316116.html#%E4%BD%BF%E7%94%A8-.net-stardard>


同时要把源代码管理中的插件修改为Git

最后提交即可。


从Github更新代码

在jenkins我们也新添加一个项目,名称为gittest,为了方便,直接从svn的测试项目复制,这样我们可以最大程度的减少重复配置。

将项目设置为Github项目,Job的菜单就会显示Github项。

将源代码管理Subversion改为Git


由于我之前git的插件都已经安装好,因此这里没有碰到任何问题。

添加git凭据,暂时使用用户名和密码

暂时先通过手动构建,测试一下流程是否通畅,暂时先把Build Triggers的钩都去掉

配置完后Job的左边的菜单就会出现Github项,点击就会调转到配置的Github项目的仓库中。

点击构建

构建成功,git日志如下
10:55:27 由用户 jake 启动 10:55:27 构建中 在工作空间 D:\Program Files
(x86)\Jenkins\workspace\gittest 中 10:55:27 > git.exe rev-parse
--is-inside-work-tree # timeout=10 10:55:27 Fetching changes from the remote
Git repository 10:55:27 > git.exe config remote.origin.url
https://Github.com/GuojieLin/Jenkins.Core.git # timeout=10 10:55:27 Fetching
upstream changes from https://Github.com/GuojieLin/Jenkins.Core.git 10:55:27 >
git.exe --version # timeout=10 10:55:27 using GIT_ASKPASS to set credentials
git账号 10:55:27 > git.exe fetch --tags --progress
https://Github.com/GuojieLin/Jenkins.Core.git
+refs/heads/*:refs/remotes/origin/* 10:55:34 > git.exe rev-parse
"refs/remotes/origin/master^{commit}" # timeout=10 10:55:34 > git.exe rev-parse
"refs/remotes/origin/origin/master^{commit}" # timeout=10 10:55:34 Checking out
Revision 75be92d4a4c131924a4601504cde7ba613f57b9f (refs/remotes/origin/master)
10:55:34 > git.exe config core.sparsecheckout # timeout=10 10:55:34 > git.exe
checkout -f 75be92d4a4c131924a4601504cde7ba613f57b9f 10:55:34 Commit message:
"同上" 10:55:34 > git.exe rev-list --no-walk
da3b7456cf40552cdc66daf2d2db4ed43762c8e4 # timeout=10 10:55:34 Path To
MSBuild.exe: D:\Program Files (x86)\Microsoft Visual
Studio\2017\Enterprise\MSBuild\15.0\Bin\MSBuild.exe ... 10:55:43 [WS-CLEANUP]
Deleting project workspace... 10:55:43 [WS-CLEANUP] done 10:55:43 Finished:
SUCCESS
git上显示构建状态

在Build中添加Set build status to "pending on Github commit"
,在构建前可以更新Git的提交的状态为pending


若构建时上面步骤出现异常错误为ERROR: [Github Commit Status Setter] Failed to update commit
state on Github. Ignoring exception [Cannot retrieve Git metadata for the build]
,则检查Git和GitClient插件的版本,下面的rc版本有bug
<https://issues.jenkins-ci.org/browse/JENKINS-54249?page=com.atlassian.jira.plugin.system.issuetabpanels%3Aall-tabpanel>
会导致无法更新状态待git,使用后面的版本即可。


在Post-build Action添加Set Github commit status(universal)

修改圈中的项,构建成功后就会更新对应的状态到Git。


通过上面配置完后就可以显示Jenkins的构建状态了


自动触发构建

Jenkins支持2种配置方式

* 手工模式
手工模式需要在git人工配置jenkins的webhook的通知接收地址,地址格式为$JENKINS_BASE_URL/Github-webhook/,如:
http://127.0.0.1:8080/Github-webhook/。
* 自动模式
自动模式会通过Github的api自动创建webhook
详细文档可以查看Github Plugin插件文档
<https://wiki.jenkins.io/display/JENKINS/Github+Plugin#GithubPlugin-GithubhooktriggerforGITScmpolling>


手工模式

在Build Triggers选择Github hook trigger for GITScm polling


Github上面需要添加一个钩子,用于代码push完成后通知jenkins构建。
在设置中点击Webhooks

点击添加Webhooks

由于Github需要通知到我本地的jenkins服务,因此Jenkins的钩子回调地址必须能被Github访问到,我用花生壳做了内网穿透。

将Jenkins的钩子地址配置到Github的webhooks中。只需要push事件即可。


自动模式

在系统设置中找到Github服务器,添加一个凭证,点击连接测试。若显示Credentials verified for user XXXX, rate
limit: XXXX即表示连接成功,由于Github有访问限制具体查看Understanding rate limits for Github Apps
<https://developer.Github.com/apps/building-Github-apps/understanding-rate-limits-for-Github-apps/>

然后点击Advanced后可以修改hook的url,我在本地默认是127.0.0.1
的地址,Github肯定是访问不到的,需要修改为正确的可被外部访问到的外网地址。


设置完后当修改Job的配置保存时就会触发创建Github的钩子。

但是发现通过Github无法通知到我本地的jenkens,一值显示超时。

测试了下通知地址外网是可以访问到的,因此怀疑是不是由于某些原因导致Github无法访问进来。

Gitlab持续集成

由于在国内Github访问速度不是很理想,大部分公司都会搭建私有的Git仓库,比如Gitlab。

为了方便,我直接将Github的项目导入到了Gitlab中,具体导入方法可以查看如何从Github迁移到Gitlab?
<https://www.cnblogs.com/tsingke/p/9632913.html>

同时我需要在VS项目中添加Gitlab的远程库。
在VS团队资源管理器-存储库中添加一个远程。


安装插件

安装必要的插件Gitlab Authentication plugin 、Gitlab Hook Plugin、Gitlab Plugin。

需要注意的是安装Gitlab Hook Plugin插件的时候,若Jenkins的安装目录路径存在空格,则可能安装失败。原因是因为Gitlab Hook
Plugin 依赖于ruby-runtime,而ruby-runtime
不支持有空格的路径。因此解决办法是将jenkins迁移到无空格的路径下,如我本来安装的目录是D:\Program Files (x86)\Jenkins
,将其迁移到D:\Jenkins。具体步骤如下:

* 打开任务管理器或到windows服务中找到Jenkins,关闭Jenkins服务。
* 将Jenkins整个复制到D:\Jenkins。
* 去注册表计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Jenkins
修改Jenkins服务路径。为D:\Jenkins。


*
启动Jenkins服务

Gitlab Hook Plugin插件可能有个安全问题会提示警告。

通过上述步骤Gitlab Hook Plugin插件就能安装成功了

配置Gitlab账号

在Jenkins系统设置中找到Gitlab的配置

钩起Enable authentication for '/project' end-point,这样在Gitlab通知时需要身份验证,保证安全性。


添加Token

到Gitlab右上角的用户头像点击右键找到Setting

然后找到Access Token生成一个Token,只需要勾选api权限即可。


添加凭据

将生成好的Token复制下来,回到Jenkins配置

添加一个凭据,选择Gitlab API token,使用刚才生成的token添加即可。

添加完成后测试连通性显示Success即可。
在Gitlab connections我们需要增加如何连接Gitlab,和Github一样,我们需要增加一个token,用于授权Jenkins的访问。

配置Git地址

修改Git路径。选择刚才添加的Gitlab连接。


修改源码管理中的项目路径


我们可以使用用户名密码或者token的方式访问Gitlab

配置钩子

在Build Triggers中勾选Build when a change is pushed to Gitlab
,后面会生成钩子路径,如果是本地注意将后面的回环地址ip改为本地ip。
在Secret token点击生成一个token,这个token是用于授权web hook访问的。若没有配置在钩子触发是可能会返回403错误码。


到Gitlab添加一个web钩子,在Setting-Integrations中配置
将刚才的钩子通知地址输入,我本地无需SSL,因此去除了勾选,只有在Push的时候才需要触发。然后添加钩子。


添加完成点击Push events发起一个测试,

返回200则表明触发成功。


通知Gitlab状态

在Job的配置中Post-build action添加Publish build status to Gitlab,构建完后就可通知到Gitlab上构建状态。




结语

本章完成了使用Github和Gitlab进行源代码管理进行持续集成。但是Github由于无法通知到我本地的jenkins所以无法自动构建。

无论使用SVN还是GIT进行源码管理,整体流程不变,自动通知的关键都是代码提交后通知Jenkins触发构建。
|SVN|Git|
|-|-|
|通过客户端或SVN服务器钩子,代码提交后执行脚本通知Jenkins。|代码push后,Git通过web hook通知Jenkins|

参考文档

* 手把手教你搭建Jenkins+Github持续集成环境 <https://www.jianshu.com/p/22b7860b4e81>
* Webhooks Guide <https://developer.Github.com/webhooks/>
* Understanding rate limits for Github Apps
<https://developer.Github.com/apps/building-Github-apps/understanding-rate-limits-for-Github-apps/>
* 使用Github的webhooks进行网站自动化部署
<https://aotu.io/notes/2016/01/07/auto-deploy-website-by-webhooks-of-Github/>
* Jenkins详细实践:SpringBoot+Jenkins+Gitlab+Docker-Maven插件
<https://blog.csdn.net/alinyua/article/details/81103570>
* Github Commit Status Setter - Cannot retrieve Git metadata
<https://issues.jenkins-ci.org/browse/JENKINS-54249?page=com.atlassian.jira.plugin.system.issuetabpanels%3Aall-tabpanel>
本文地址:https://www.cnblogs.com/Jack-Blog/p/10346032.html
<https://www.cnblogs.com/Jack-Blog/p/10346032.html>
作者博客:杰哥很忙
欢迎转载,请在明显位置给出出处及链接

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信