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篇文章总结的最终流程如下。

graph LR

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

我们需要修改3个方面。

  1. 代码提交到Git上
  2. 提交到Git上自动触发构建
  3. 从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种配置方式

  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

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 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



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

参考文档

  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



微信扫一扫二维码关注订阅号杰哥技术分享

本文地址:https://www.cnblogs.com/Jack-Blog/p/10346032.html

作者博客:杰哥很忙

欢迎转载,请在明显位置给出出处及链接

Jenkins持续集成学习-Windows环境进行.Net开发4的更多相关文章

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

    目录 Jenkins持续集成学习-Windows环境进行.Net开发 目录 前言 目标 使用Jenkins 安装 添加.net环境配置 部署 结语 参考文档 Jenkins持续集成学习-Windows ...

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

    目录 Jenkins持续集成学习-Windows环境进行.Net开发2 目录 前言 目标 使用 .Net Stardard 单元测试 流程 手动执行单元测试 自动执行单元测试 单元测试报告 上传Nug ...

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

    目录 Jenkins持续集成学习-Windows环境进行.Net开发3 目录 前言 目标 优化nuget包生成流程 自动触发构建 Jenkins定时轮询触发 SVN客户端钩子触发 SVN服务器钩子触发 ...

  4. Jenkins持续集成学习-搭建jenkins问题汇总

    目录 Jenkins持续集成学习5-搭建jenkins问题汇总 目录 前言 问题列表 nuget还原包问题 编译问题 SVN更新问题 参考文档 Jenkins持续集成学习5-搭建jenkins问题汇总 ...

  5. Windows系统的Jenkins持续集成环境

    Windows系统的Jenkins持续集成环境 如题:本文将介绍如何在Windows环境下运用Jenkins部署持续集成环境.之所以写本文,是因为在最近工作当中,学习使用Jenkins时,确实遇到了一 ...

  6. windows部署jenkins持续集成maven测试项目不能访问测试报告

    买了一台阿里云的服务器用于练习maven test项目,系统版本wiondows server 2012,将jenkins war包部署在Tomcat服务器上,项目构建后,生成的报告在C:\Windo ...

  7. windows系统下构建Jenkins持续集成

    环境准备 windows10+tomcat+python3.x(安装方法自行百度) 安装Jenkins 从https://jenkins.io/download/ 下载war包 将war包放到tomc ...

  8. Jenkins持续集成(上)-Windows下安装Jenkins

    环境:Windows 2008 R2.Jenkins2.235.1: 概要 前面写过一篇文章,<自动发布-asp.net自动发布.IIS站点自动发布(集成SLB.配置管理.Jenkins)> ...

  9. Docker+Jenkins持续集成环境(4):使用etcd+confd实现容器服务注册与发现

    前面我们已经通过jenkins+docker搭建了基本的持续集成环境,实现了服务的自动构建和部署,但是,我们遇到一个问题,jenkins构建出来的镜像部署后,需要通过ip:port去访问,有什么更好的 ...

随机推荐

  1. Apache Beam是什么?

    Apache Beam 的前世今生 1月10日,Apache软件基金会宣布,Apache Beam成功孵化,成为该基金会的一个新的顶级项目,基于Apache V2许可证开源. 2003年,谷歌发布了著 ...

  2. delphi 中record 的类操作符重载简介

    今天简单介绍一下 delphi 中record 的类操作符重载使用,就是如何 实现 record 之间的简单操作. 关于类操作符重载 ,大家可以看官方的文档. Delphi allows certai ...

  3. jQuery库介绍

    一.jQuery是什么 jQuery是一个轻量级,兼容多浏览器的JavaScript库 jQuery能够简化JavaScript编程 二.jQuery的优势 1.一款轻量级的JavaScript框架 ...

  4. python_requests随笔

    #coding=utf-8 import requests url = "http://oj.jxust.edu.cn" #如果需要持续的链接,可以使用里面的Session方法(保 ...

  5. Centos 7 搭建.net web项目

    现在的.NET Core 1.0版本是一个很小的核心,APIs和工具也并不完整,但是随着.Net Core的不断完善,补充的Apis和创新也会一起整合到.NET Framework中. 安装cento ...

  6. PHP字符串函数之 strcmp strncmp strcasecmp strncasecmp strnatcmp strnatcasecmp

    strcmp – 二进制安全字符串比较 strncmp – 二进制安全比较字符串开头的若干个字符 strcasecmp – 二进制安全比较字符串(不区分大小写) strncasecmp – 二进制安全 ...

  7. Alpha阶段项目复审(冲鸭队)

    Alpha阶段项目复审(冲鸭队) 组名 优点 缺点 排名 天冷记得穿秋裤队 支持文件离线开源下载,没有限速 部分功能未实现 1 中午吃啥队 点餐系统用户需求较高,系统功能完善 界面可以再完善一下些 2 ...

  8. redis之一初识redis

    本文主要围绕以下几点进行阐述: 1.什么是redis? 2.为什么要使用redis呢? 3.redis的一些基本配置 4.redis的缺点? 正文: 1.什么是redis? Redis是一款内存高速缓 ...

  9. 笔记:Activity的启动过程

    Activity的创建特点 作为四大组件之一的Activity,它不像普通java对像那样,可以new出来,然后去使用.而是调用 startActivity()这样的方式启动.那么Android系统是 ...

  10. Javascript高级编程学习笔记(4)—— JS中的数据类型(2)

    接着昨天的文章,今天这篇文章主要讲述JS中剩余的两种数据类型String,和Object String类型 对于该类型,书中给出的解释为:由0或多个16为Unicode字符组成的字符序列. 对于JS中 ...