本文介绍,如何使用Jenkins构建.Net项目。

环境配置

安装MsBuild编译工具

1、下载工具
下载地址:https://visualstudio.microsoft.com/zh-hans/downloads/
进入页面,最下面“所有下载”,点开“适用于Visual Studio 2022的工具”,下载“Visual Studio 2022生成工具”

2、安装
启动下载的vs_BuildTools.exe,在启动界面,勾选“工作负荷”=》Web和云=》Web开发生成工具,点击右下角的安装,然后等待程序安装完成:


注意1:安装时,要选择需要构建的版本号。
目标包和SDK的区别:目标包表示使用高版本号构建这个低版本号的程序,一般都是向下兼容的。
注意2:默认的Visual Studio2022已经没有的.NetFramework4.0的支持了,如果需要支持编译4.0的应用,需要下载和安装VisualStudio2019,这里选择一下.NET Framework4.0的目标包支持,就OK了

3、修改系统环境变量的PATH
安装完成后,编译工具的默认路径在:
C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin\MSBuild.exe
在系统环境变量里添加这个路径:
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin

4、重启Jenkins,以使上一步的PATH配置生效
http://127.0.0.1:8080/restart

5、安装Jenkins的MSBuild插件

6、配置Jenkins的MSBuild
在Global Tool Configuration下方,点新增MSBuild,在Name里输入MSBuild2022,在Path to MSBuild里输入C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin


安装nuget

nuget用于拉取项目的依赖包,去这里下载最新版本:https://www.nuget.org/downloads
复制到D:\JenkinsWorkspace\nuget 目录下


安装Sonarqube Scanner for MSBuild

这是代码审查工具,用于扫描代码质量的,可以跳过。
注:你必须先安装Sonarqube服务,才能使用这个代码扫描。

1、下载
下载地址:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner-for-msbuild/

2、安装
把下载的sonar-scanner-msbuild-5.8.0.52797-net46.zip 解压到 D:\JenkinsWorkspace\sonar-scanner-msbuild-5.8.0.52797-net46
并修改对应的sonar服务地址,配置文件是:
D:\JenkinsWorkspace\sonar-scanner-msbuild-5.8.0.52797-net46\sonar-scanner-4.7.0.2747\conf\sonar-scanner.properties

3、安装Jenkins里的Sonar插件

注:在安装这个插件的过程中反因为这个插件依赖了10来个插件,经常报错:Caused: java.io.IOException: Failed to load https://updates.jenkins.io/download/plugins/bouncycastle-api/2.26/bouncycastle-api.hpi to C:\ProgramData\Jenkins\.jenkins\plugins\bouncycastle-api.jpi.tmp
反复重试了10多次,每次成功1,2个,好不容易才成功。
官方也很多人反馈这个错误,没有解决方案:https://issues.jenkins.io/browse/JENKINS-63506?page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel&showAll=true

4、配置
进入“Jenkins”的Global Tool Configuration,点“新增SonarScanner for MSBuild”,Name随意,MSBUILD_SQ_SCANNER_HOME输入 D:\JenkinsWorkspace\sonar-scanner-msbuild-5.8.0.52797-net46

创建.Net构建Job

1、创建Job
点击左侧菜单的“New Item”,进入创建页,任意输入名称,选择“Freestyle project”:

2、上一步OK后,进入Job的配置页面,
2.1、通用配置General:

  • 勾选This project is parameterized
  • 点击Add Parameter,选择Git Parameter,name输入publish_branch,Parameter Type为branch,Default Value为origin/master

2.2、源码管理配置
2.2.1、先选择源码管理的Git,输入对应的Git项目地址:

2.2.2、创建Gitlab的访问凭证
在上一步,输入gitlab地址,会提示无权限访问,点击“Credentials”下面的Add,添加凭证;
在弹出页面的Kind里选择 SSH Username with private key, 下面“Private Key”那里点击“Enter directly", 把id_rsa私匙内容复制进来:
注:如何获取gitlab的ssh key,并添加到gitlab里,参考官网:https://docs.gitlab.com/ee/user/ssh.html 或直接百度一下即可

2.2.3、Gitlab的分支配置正确:
Branched to build下面的分支,配置为用于构建的分支,这里输入${publish_branch},就是上面配置的git参数

2.2.4、初始化SSH的首次连接
按2.2.2配置了密钥后,依然会连接不上gitlab,会报错:
No ED25519 host key is known for git.xxx.com and you have requested strict checking
这是因为当前用户在首次连接时,会弹出未知主机的警告,需要添加信任。
所以需要使用 Jenkins服务的启动用户,去执行命令:
git.exe ls-remote -h -- git@git.xxx.com:xxx/xxx.git
按前一篇文章,配置的是使用System用户启动Jenkins服务,因此,需要使用微软的精品工具SysinternalsSuite里的psexec,来模拟System用户登录,参考启动方法:https://youbl.blog.csdn.net/article/details/83898399
模拟System用户登录后,执行上面的命令,如图,在弹出的提示里输入yes即可:


2.3、构建环境选项Build Environment

  • 勾选Set jenkins user build variables
  • 勾选Add timestamps to the Console Output
  • 勾选”Inject environment variables to the build process",或”将环境变量注入构建过程“,此时可以在下面的Properties Content里填写kv对,作为环境变量,例如(下面的sln是相对路径的解决方案文件名,后面构建时使用):
# 解决方案文件的相对路径
build_target_file=src\xxx.sln
# 编译结束后的结果文件存储路径
archive_paths=src\Setup\targets

或在Groovy Script脚本里,去定义环境变量,例如:

def executeCmd(String cmd){def sout = new StringBuilder(), serr = new StringBuilder();def proc = cmd.execute();proc.consumeProcessOutput(sout, serr);proc.waitForOrKill(1000);println "out> $sout err> $serr";//def props = new Properties();//def solutionFile = new File(WORKSPACE + '\\solution.properties');//props.load(solutionFile.newDataInputStream());//return props;
}
println this.binding.getVariables().toString();//if(this.binding.hasVariable(key))return this.binding.getVariable(key);
// 三引号,表示长字符串,如 """abc换行"""
def cmd = "cmd.exe /c dir /w";
executeCmd(cmd);
def props = new Properties();
Date now = new Date();
props.deploy_time = new Date().format("yyyy-MM-dd HH:mm:ss.SSS");
props.deploy_timestamp = now.getTime(); // 1970年1月1日,00:00:00 GMT以来的毫秒数
println "ready for inject env:";
props.each{ k, v -> println "${k}:${v}" }
return props;

2.4、构建步骤Build Steps
2.4.1、这是构建的第一步,通常用于校验一些输入参数是否合法之类,
点击Add build step,选择Execute system Groovy script,添加脚本,Demo参考:

def desc = build.getEnvironment(listener).get('publish_branch')
if(desc == null || desc == "") // 如果缺少必要的参数,阻断构建throw new Exception("publish_branch 不能为空")

2.4.2、为当前构建,设置一个名称,并会在列表里显示这个名称,方便后续进行分辨;
点击Add build step,选择Update build name,勾选Use macro,下面填写:
${JOB_NAME}_${BUILD_NUMBER}@${publish_branch}

2.4.3、更新项目依赖包
点击Add build step,选择Execute Windows batch command,命令里填写:
“D:\JenkinsWorkspace\nuget\nuget.exe” restore “%WORKSPACE%%build_target_file%” -Source “https://api.nuget.org/v3/index.json;http://yourNuget-url/nuget”
注:build_target_file 是上面配置的变量;yourNuget-url是如果有你自己的nuget,要添加,没有就删除

2.4.4、配置MSBuild构建:
点击Add build step,选择Build a Visual Studio projecct or solution using MSBuild,版本选择上面配置的MSBuild2022
MSBuild Build File输入${build_target_file}
Command Line Arguments输入 /t:Rebuild /property:Configuration=Release;DebugType=pdbonly;DeployOnBuild=false;OutputPath=targets

2.4.5、复制构建结束的结果文件
点击Add build step,选择Windows batch command,在命令窗口输入:

if not exist D:\JenkinsWorkspace\AllArchives\%JOB_NAME%\%BUILD_NUMBER% (mkdir D:\JenkinsWorkspace\AllArchives\%JOB_NAME%\%BUILD_NUMBER%
)
echo f |XCOPY /Y /E  %WORKSPACE%\%archive_paths%\*.* D:\JenkinsWorkspace\AllArchives\%JOB_NAME%\%BUILD_NUMBER%\

注:也可以创建Groovy脚本,把生成的文件,通过rsync或ftp或其它方法,推送到远端的服务器,来完成发布工作。


2.5、构建后步骤Post-build Actions
这是构建结束的一些操作,可以做一些日志、通知之类
2.5.1、点击Add post-build action,选择Groovy Postbuild,输入脚本参考:

def beginTime = manager.envVars["deploy_timestamp"];
// 注意不能直接用 println,参考 https://plugins.jenkins.io/groovy-postbuild/
manager.listener.logger.println '--==--耗时:' + (new Date().getTime() - Long.valueOf(beginTime)) + '毫秒';

3、OK,到这里,.Net的项目创建完成了,保存它。
回到myFirstJob的主界面,点击左侧菜单的Build with Parameters,在右边选择一个分支,构建一下试试吧。


后语

上面只是演示了我自己的.Net项目的构建步骤,你可以在配置里,整个构建的任意一个环节,添加你自己的环境变量注入,自己的构建步骤,自己的通知内容等等。

DevOps-2:持续集成工具Jenkins构建.Net项目相关推荐

  1. 【云原生 • DevOps】一文掌握持续集成工具 Jenkins

    目录 一.持续集成工具 Jenkins 介绍 1. 什么是持续集成 2. Jenkins 介绍 二.Jenkins 的安装与部署 1. 安装 Jenkins 2. 本地访问 Jenkins 3. 插件 ...

  2. python 持续集成工具_持续集成工具: Jenkins学习

    持续集成工具: Jenkins学习 -- 部分内容收集自网络,如有侵权,请联系作者删除 一. 概念 在过去的开发整体流程中,是所有人写好代码之后统一进行合并(svn,git),然后进行测试,确保准发布 ...

  3. 【DevOps】持续集成环境-Jenkins安装图文版

    文章目录 前言 Jenkins的安装 1. 环境 2. 安装java 3. 下载Jenkins 4. 安装Jenkins 5. 访问测试 6. 安装插件 7. 创建管理员账号 8. 安装完成: 总结 ...

  4. 持续集成工具Jenkins学习4 Idea集成Jenkins插件

    持续集成工具Jenkins学习4 Idea集成Jenkins插件 一.功能简介 二.安装Idea插件 1. 搜索安装 2. 设置 三.Jenkins开启CSRF 四.使用 一.功能简介 Idea可以方 ...

  5. jenkins 忘记密码_持续集成工具Jenkins 在CentOS系统下安装

    一.Jenkins简介 Jenkins是一个开源的持续集成工具,用于持续.自动的构建.测试.发布项目.Jenkins使用Java开发,可与版本管理工具集成使用. Jenkins支持UI操作来部署流水线 ...

  6. 中小型研发团队架构实践:高效率、低风险,一键发布并测试的持续集成工具Jenkins...

    一.Jenkins 简介 \\ 当每月发布次数变得越来越多时,如超过 200 次,发布工作人员的工作量会翻倍,此时由人工发布操作失误引起的风险会变得越来越大.为了提高项目的发布效率,也为了降低由人工操 ...

  7. 持续集成工具jenkins的部署--Windows篇

    一.前言 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能.本文使用Jenkins构建githu ...

  8. 持续集成工具 Jenkins vs TeamCity

    1. 先来看看受欢迎程度: 2. Jenkins vs TeamCity: What are the differences? Jenkins Jenkins 是一个开源工具,Jenkins的出现的时 ...

  9. 如何做好持续集成和部署?你不容错过的持续集成工具—Jenkins

    持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成.每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地 ...

最新文章

  1. java精确除法计算,四舍五入 Java问题通用解决代码
  2. [转]总结:Apache/Tomcat/JBOSS/Jetty/Nginx区别 .
  3. Transformer 是万能的吗?
  4. UML从需求到实现----用例
  5. 基于motion的视频压缩的实时监控系统
  6. 「代码随想录」本周学习小结!(动态规划系列三)
  7. 装饰者模式(C#)实现
  8. 【图论】Prim算法求最小生成树详解
  9. 考计算机一级用什么软件学,大学计算机一级考试用的是什么word软件
  10. 中了磁碟机病毒,惨啊!!!
  11. box-shadow属性详解
  12. 剑指 Offer II 075. 数组相对排序(中等 排序 数组)
  13. Unity 简易读取配置文件内容(txt,懒人用)
  14. selenium中的三种等待方法
  15. Android -- 读取assets文件夹下的资源
  16. CPU中寄存器作用及说明
  17. 采集需要登录后的网页(重定向后cookie丢失问题)
  18. MATLAB 自动数独求解器(导入图片自动求解)
  19. OSX的一些基本知识
  20. 王卫不再担任顺丰速运法人 变更为陈雪颖

热门文章

  1. matlab 单位化矩阵,MATLAB数据矩阵单位化,归一化,标准化
  2. c#中regex的命名空间_C# Regex类用法
  3. 利用注册表清除Office Word文档杀手病毒
  4. 利用ajax实现excel报表导出(解决乱码问题)
  5. android 短信字体,安卓短信字体 安卓短信字体大小设置
  6. 针对双非学生计算机保研信息分享
  7. 记录第一次使用nvidia tao训练模型的过程
  8. 金蝶K3案例实验实际成本前台操作
  9. phpwind database.php,phpwind中的数据库操作类
  10. CSS 新属性 《设置容器长宽比》