Jenkins持续集成学习-Windows环境进行.Net开发4

Jenkins持续集成学习-Windows环境进行.Net开发4


目录

Jenkins持续集成学习-Windows环境进行.Net开发1
Jenkins持续集成学习-Windows环境进行.Net开发2
Jenkins持续集成学习-Windows环境进行.Net开发3
Jenkins持续集成学习-Windows环境进行.Net开发4
Jenkins持续集成学习-搭建jenkins问题汇总

前言

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

目标

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

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

23.PNG

自动构建
通过
不通过
通过
不通过
获取代码
编码
提交代码
编译程序集
编译单元测试程序集
执行单元测试
失败
创建nuget包
上传nuget包
清理编译文件夹

我们需要修改3个方面。

  1. 代码提交到Git上
  2. 提交到Git上自动触发构建
  3. 从Git上更新代码

Github持续集成

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

提交代码到Github

首先新建一个git仓库
1.png
3.PNG
4.png

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

关于project.assets.json的作用可以查看Jenkins持续集成学习-Windows环境进行.Net开发2

5.png
同时要把源代码管理中的插件修改为Git
6.png
最后提交即可。
7.PNG

从Github更新代码

在jenkins我们也新添加一个项目,名称为gittest,为了方便,直接从svn的测试项目复制,这样我们可以最大程度的减少重复配置。
9.PNG
将项目设置为Github项目,Job的菜单就会显示Github项。
45.PNG
将源代码管理Subversion改为Git
10.PNG

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

添加git凭据,暂时使用用户名和密码
10.PNG
暂时先通过手动构建,测试一下流程是否通畅,暂时先把Build Triggers的钩都去掉
13.PNG
配置完后Job的左边的菜单就会出现Github项,点击就会调转到配置的Github项目的仓库中。
14.PNG
点击构建
11.PNG
构建成功,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
36.png

若构建时上面步骤出现异常错误为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会导致无法更新状态待git,使用后面的版本即可。
39.PNG

Post-build Action添加Set Github commit status(universal)
37.PNG
修改圈中的项,构建成功后就会更新对应的状态到Git。
40.png

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

自动触发构建

Jenkins支持2种配置方式

  1. 手工模式
    手工模式需要在git人工配置jenkins的webhook的通知接收地址,地址格式为$JENKINS_BASE_URL/Github-webhook/,如:http://127.0.0.1:8080/Github-webhook/
  2. 自动模式
    自动模式会通过Github的api自动创建webhook

详细文档可以查看Github Plugin插件文档

手工模式

Build Triggers选择Github hook trigger for GITScm polling
17.PNG

Github上面需要添加一个钩子,用于代码push完成后通知jenkins构建。
在设置中点击Webhooks
15.png
点击添加Webhooks
16.png
由于Github需要通知到我本地的jenkins服务,因此Jenkins的钩子回调地址必须能被Github访问到,我用花生壳做了内网穿透。
42.PNG
将Jenkins的钩子地址配置到Github的webhooks中。只需要push事件即可。
17.png

自动模式

在系统设置中找到Github服务器,添加一个凭证,点击连接测试。若显示Credentials verified for user XXXX, rate limit: XXXX即表示连接成功,由于Github有访问限制具体查看Understanding rate limits for Github Apps
然后点击Advanced后可以修改hook的url,我在本地默认是127.0.0.1的地址,Github肯定是访问不到的,需要修改为正确的可被外部访问到的外网地址。
35.PNG

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

但是发现通过Github无法通知到我本地的jenkens,一值显示超时。
34.png
测试了下通知地址外网是可以访问到的,因此怀疑是不是由于某些原因导致Github无法访问进来。

Gitlab持续集成

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

为了方便,我直接将Github的项目导入到了Gitlab中,具体导入方法可以查看如何从Github迁移到Gitlab?

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

安装插件

安装必要的插件Gitlab Authentication pluginGitlab Hook PluginGitlab Plugin

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

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

21.PNG
4. 启动Jenkins服务

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

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

配置Gitlab账号

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

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

添加Token

Gitlab右上角的用户头像点击右键找到Setting
23.PNG
然后找到Access Token生成一个Token,只需要勾选api权限即可。
23.PNG

添加凭据

将生成好的Token复制下来,回到Jenkins配置
25.PNG
添加一个凭据,选择Gitlab API token,使用刚才生成的token添加即可。
26.PNG
添加完成后测试连通性显示Success即可。
Gitlab connections我们需要增加如何连接Gitlab,和Github一样,我们需要增加一个token,用于授权Jenkins的访问。

配置Git地址

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

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

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

配置钩子

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

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

添加完成点击Push events发起一个测试,
31.PNG
返回200则表明触发成功。
32.PNG

通知Gitlab状态

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

43.PNG

结语

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

无论使用SVN还是GIT进行源码管理,整体流程不变,自动通知的关键都是代码提交后通知Jenkins触发构建。

SVN Git
通过客户端或SVN服务器钩子,代码提交后执行脚本通知Jenkins。 代码push后,Git通过web hook通知Jenkins

参考文档

  1. 手把手教你搭建Jenkins+Github持续集成环境
  2. Webhooks Guide
  3. Understanding rate limits for Github Apps
  4. 使用Github的webhooks进行网站自动化部署
  5. Jenkins详细实践:SpringBoot+Jenkins+Gitlab+Docker-Maven插件
  6. Github Commit Status Setter - Cannot retrieve Git metadata

20191127212134.png
微信扫一扫二维码关注订阅号杰哥技术分享
本文地址:https://www.cnblogs.com/Jack-Blog/p/10346032.html
作者博客:杰哥很忙
欢迎转载,请在明显位置给出出处及链接

posted @   杰哥很忙  阅读(2141)  评论(1编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2015-02-01 自定义Attribute 服务端校验 客户端校验
点击右上角即可分享
微信分享提示