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篇文章总结的最终流程如下。
获取代码 --> 编码
编码 --> 提交代码
提交代码 --> |自动构建| 编译程序集
编译程序集 --> 编译单元测试程序集
编译单元测试程序集 --> |通过| 执行单元测试
编译单元测试程序集 --> |不通过| 失败
执行单元测试 --> |通过| 创建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
同时要把源代码管理中的插件修改为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会导致无法更新状态待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插件文档。
手工模式
在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。
然后点击Advanced后可以修改hook的url,我在本地默认是127.0.0.1
的地址,Github肯定是访问不到的,需要修改为正确的可被外部访问到的外网地址。
设置完后当修改Job的配置保存时就会触发创建Github的钩子。
但是发现通过Github无法通知到我本地的jenkens,一值显示超时。
测试了下通知地址外网是可以访问到的,因此怀疑是不是由于某些原因导致Github无法访问进来。
Gitlab持续集成
由于在国内Github访问速度不是很理想,大部分公司都会搭建私有的Git仓库,比如Gitlab。
为了方便,我直接将Github的项目导入到了Gitlab中,具体导入方法可以查看如何从Github迁移到Gitlab?
同时我需要在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
。
4. 启动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持续集成环境
- Webhooks Guide
- Understanding rate limits for Github Apps
- 使用Github的webhooks进行网站自动化部署
- Jenkins详细实践:SpringBoot+Jenkins+Gitlab+Docker-Maven插件
- Github Commit Status Setter - Cannot retrieve Git metadata
微信扫一扫二维码关注订阅号杰哥技术分享
本文地址:https://www.cnblogs.com/Jack-Blog/p/10346032.html
作者博客:杰哥很忙
欢迎转载,请在明显位置给出出处及链接
Jenkins持续集成学习-Windows环境进行.Net开发4的更多相关文章
- Jenkins持续集成学习-Windows环境进行.Net开发1
目录 Jenkins持续集成学习-Windows环境进行.Net开发 目录 前言 目标 使用Jenkins 安装 添加.net环境配置 部署 结语 参考文档 Jenkins持续集成学习-Windows ...
- Jenkins持续集成学习-Windows环境进行.Net开发2
目录 Jenkins持续集成学习-Windows环境进行.Net开发2 目录 前言 目标 使用 .Net Stardard 单元测试 流程 手动执行单元测试 自动执行单元测试 单元测试报告 上传Nug ...
- Jenkins持续集成学习-Windows环境进行.Net开发3
目录 Jenkins持续集成学习-Windows环境进行.Net开发3 目录 前言 目标 优化nuget包生成流程 自动触发构建 Jenkins定时轮询触发 SVN客户端钩子触发 SVN服务器钩子触发 ...
- Jenkins持续集成学习-搭建jenkins问题汇总
目录 Jenkins持续集成学习5-搭建jenkins问题汇总 目录 前言 问题列表 nuget还原包问题 编译问题 SVN更新问题 参考文档 Jenkins持续集成学习5-搭建jenkins问题汇总 ...
- Windows系统的Jenkins持续集成环境
Windows系统的Jenkins持续集成环境 如题:本文将介绍如何在Windows环境下运用Jenkins部署持续集成环境.之所以写本文,是因为在最近工作当中,学习使用Jenkins时,确实遇到了一 ...
- windows部署jenkins持续集成maven测试项目不能访问测试报告
买了一台阿里云的服务器用于练习maven test项目,系统版本wiondows server 2012,将jenkins war包部署在Tomcat服务器上,项目构建后,生成的报告在C:\Windo ...
- windows系统下构建Jenkins持续集成
环境准备 windows10+tomcat+python3.x(安装方法自行百度) 安装Jenkins 从https://jenkins.io/download/ 下载war包 将war包放到tomc ...
- Jenkins持续集成(上)-Windows下安装Jenkins
环境:Windows 2008 R2.Jenkins2.235.1: 概要 前面写过一篇文章,<自动发布-asp.net自动发布.IIS站点自动发布(集成SLB.配置管理.Jenkins)> ...
- Docker+Jenkins持续集成环境(4):使用etcd+confd实现容器服务注册与发现
前面我们已经通过jenkins+docker搭建了基本的持续集成环境,实现了服务的自动构建和部署,但是,我们遇到一个问题,jenkins构建出来的镜像部署后,需要通过ip:port去访问,有什么更好的 ...
随机推荐
- c++ 计算cpu占用率
计算CPU占用率就是获取系统总的内核时间 用户时间及空闲时间 其中空闲时间就是内核空转 所以内核时间包含空闲时间 然后计算 运行时间 = 内核时间 加 用户时间 减去 空闲时间 间隔时间 = 内核时 ...
- 2、JavaScript 基础二 (从零学习JavaScript)
11.强制转换 强制转换主要指使用Number.String和Boolean三个构造函数,手动将各种类型的值,转换成数字.字符串或者布尔值. 1>Number强制转换 参数为原始类型值的转换规 ...
- python中global和nonlocal用法的详细说明
一.global 1.global关键字用来在函数或其他局部作用域中使用全局变量.但是如果不修改全局变量也可以不使用global关键字. gcount = 0 def global_test(): ...
- jmeter+Jenkins持续集成(邮件通知)
jmeter构建后,自送发送邮件到指定的邮箱,配置如下 1)Jenkins Location配置 jenkins首页->系统管理->系统配置页面 其中Jenkins URL有默认值,最好修 ...
- 引用数据类型 Scanner和 Random
键盘录入Scanner 获取键盘录入的数据,对获取数据的具体操作进行了封装,只需要调用方法,即可得到键盘录入的数据 A:导包 import java.util.Scanner; ...
- Codeforces Round #540 (Div. 3)--1118C - Palindromic Matrix
https://codeforces.com/contest/1118/problem/C 在查找元素的时候,必须按4,2,1的顺序进行.因为,如果先找1,可能就把原来的4拆散了,然后再找4,就找不到 ...
- web安全基础
web安全备忘 主机系统安全防护:防火墙控制 Web是一个分布式系统,一个站点多个主机布置,一主机布置多个站点:并发,异步,同步 主机安全配置文件修改与强化 web站点数据验证逻辑的常用技巧:功能性代 ...
- iOS逆向工程之Cycript
1.连接设备 打开一个终端,输入指令: iproxy 重新打开一个新的终端,输入指令: ssh -p root@127.0.0.1 这时候会提示输入密码:默认密码为“alpine”.这样就可以连接到设 ...
- 项目Alpha冲刺(团队4/10)
项目Alpha冲刺(团队4/10) 团队名称: 云打印 作业要求: 项目Alpha冲刺(团队) 作业目标: 完成项目Alpha版本 团队队员 队员学号 队员姓名 个人博客地址 备注 221600412 ...
- scikit-image 图像处理库介绍
今天学习图像处理的时候,无意中看到了scikit 软件包,抱着学习的态度,这里做个记录,方便以后翻阅. 概念:scikit-image 是一种开源的用于图像处理的 Python 包.它包括分割,几何变 ...