简介
Jenkins 是一个持续集成(CI&CD)工具,用以构建、部署、自动化。
运行流程
以部署PC客户端软件为例:
1.连接 GitLab 仓库 pull 最新代码
2.使用 NuGet 还原引用库
3.使用 MSBuild 编译项目工程
4.使用 NSIS 打包软件为安装包
5.以邮件方式将打包文件发送(未完成)
软件部署
软件安装参考 官方文档
遇到的问题
修改工作目录
我是使用 Windows 下 java 命令运行1
java -jar jenkins.war --httpPort=8080
工作目录默认为 C:\Users{用户名}.jenkins
直接拷贝工作目录到其他地方例如 D:.jenkins
修改启动命令1
java -DJENKINS_HOME=D:\.jenkins -jar jenkins.war --httpPort=8080
插件安装失败
登录重启页重启后重试
http://localhost:8081/restart
需安装 Jenkins 插件
Git、MSBuild、NuGet、PowerShell
配置系统环境变量
Path 下增加 MSBuild 路径:
..\Microsoft Visual Studio\2019\Preview\MSBuild\Current\Bin\amd64
NuGet 控制台程序下载
https://www.nuget.org/downloads
下载后拷贝至 Path 环境变量中
构建
Pull Git 代码
填写 Git 地址以及分支名称即可
设置 Git 用户名密码
如果本地 Git 记录用户无权限访问则会报错:1
2
3
4Failed to connect to repository : Command "git.exe ls-remote -h -- http://192.168.5.188:9090/***/***.git HEAD" returned status code 128:
stdout:
stderr: remote: HTTP Basic: Access denied
fatal: Authentication failed for 'http://192.168.5.188:9090/***/***.git/'
选择:凭据→系统→全局凭据
选择:添加凭据
配置:Git 用户名密码
配置:Credentials 中选择添加的凭据
还原 NuGet 包
构建中选择:执行 Windows 批处理程序1
2
3
4:: 清空项目中多余文件
git checkout . && git clean -xdf
:: nuget 引用
nuget restore project.sln
编译代码(客户端)
构建中选择:Build a Visual Studio project or solution using MSBuild
function | value |
---|---|
MSBuild Version | Default |
MSBuild Build File | project.sln |
Command Line Arguments | /t:Build /p:Configuration=Release;VisualStudioVersion=16.3 |
编译时如需选择解决方案配置和解决方案平台1
2
3
4
5
6:: 解决方案配置“Release|Any CPU”
MSBuild project.sln /property:Configuration=Release
:: 解决方案配置“Debug|x86”
MSBuild project.sln /property:Configuration=Debug /property:Platform=x86
:: 解决方案配置“Release|x64”
MSBuild project.sln /property:Configuration=Release /property:Platform=x64
编译代码(服务端)
调用发布文件 .\Properties\PublishProfiles\FolderProfile.pubxml
测试 MSBuild 命令中加入 VisualStudioVersion=16.3 会导致不会生成发布目录1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!--
此文件由 Web 项目的发布/打包过程使用。可以通过编辑此 MSBuild 文件
自定义此过程的行为。为了解与此相关的更多内容,请访问 https://go.microsoft.com/fwlink/?LinkID=208121。
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WebPublishMethod>FileSystem</WebPublishMethod>
<PublishProvider>FileSystem</PublishProvider>3
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish />
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
<ExcludeApp_Data>False</ExcludeApp_Data>
<publishUrl>.\bin\Release\PublishOutput</publishUrl>
<DeleteExistingFiles>True</DeleteExistingFiles>
</PropertyGroup>
</Project>
function | value |
---|---|
MSBuild Version | Default |
MSBuild Build File | project.sln |
Command Line Arguments | /t:Build /p:Configuration=Release /p:DeployOnBuild=True /p:PublishProfile=FolderProfile |
拷贝或删除多余文件
1 | :: 拷贝文件 |
程序打包
构建中选择:执行 Windows 批处理程序
NSIS 使用参考:使用介绍1
2:: 调用 makensis 命令构建 NSI
makensis PanoramaClientSetup.nsi
压缩文件打包
构建中选择:PowerShell1
2
3
4
5
6# 调用 PowerShell 命令压缩文件
# 压缩文件
Compress-Archive -Path .\test -DestinationPath .\test.zip
# 解压缩文件
Expand-Archive -Path .\test.zip -DestinationPath .\test
构建后操作
归档成品
在归档成品中直接写入打包好的安装包名称,会在构建结束后在结果中显示并可以直接下载
FAQ
提示 ‘xxx’ 不是内部或外部命令,也不是可运行的程序或批处理文件。
通常这个提示代表着环境变量配置错误,但是检测时发现系统环境变量配置正常,可以在 Jenkins 目录中手动执行命令操作,重启电脑和 Jenkins 后依然无效。
解决方式:选择 Jenkins → 左下角“构建执行状态” → 右侧齿轮标志“设置” → 节点属性 → 新增“Environment variables” → 拷贝报错(或全部)的环境变量到此处 → 保存
- 无法识别环境变量中的:%SystemRoot%\,改用绝对路径。
集成 SonarQube
安装使用 SonarQube 参考博客:SonarQube 使用介绍
SonarQube 创建 Jenkins ToKen
下载插件 SonarQube Scanner
Jenkins 配置 SonarQube
添加凭据:
配置插件 SonarQube Scanner
系统管理→系统配置→SonarQube servers
配置插件 SonarQube Scanner
系统管理→全局工具配置→SonarQube Scanner
配置插件 SonarScanner for MSBuild
系统管理→全局工具配置→SonarScanner for MSBuild
配置插件 JDK
系统管理→全局工具配置→JDK
构建项目
增加配置:
构建中选择:SonarScanner for MSBuild - Begin Analyoio
配置项 Project key 与 Project name 与 创建 SonarQube 中的 Project key 与 Project name 对应
在 MSBuild 后选择: SonarScanner for MSBuild - End Analyoio
2022年3月15日补充
通过 WebHook 触发 tag 自动构建
确保安装 GitLab 插件
先在 Jenkins 中创建构建触发器:
构建触发器 -> 勾选:Build when a change is pushed to GitLab。
右侧显示:GitLab webhook URL:…… 为 WebHook API 地址,用于填写到 GitLab 中。
点击标签内高级按钮 -> Allowed branches 选择触发的分支(默认 Allow all branches to trigger this job 为所有分支都可以触发) -> Secret token 点击 Generate 按钮 生成 Token,用于填写到 GitLab 中。
GitLab 中项目仓库:设置 -> 集成 -> 填写从 Jenkins 中获取的 WebHook Url 和 Secret Token -> 勾选 Trigger 中的触发类型,当前项目仅需要 Tag 触发。
点击 Add webhook 按钮 保存设置,在下方 Project Hooks 中显示所有已有信息,点击 Test 可测试请求。
构建后上传至 FTP
确保安装 Publish Over FTP 插件
Jenkins 配置中添加:FTP repository hosts
项目构建后操作中添加:Send build artifacts over FTP -> 选择 FTP Name -> 填写匹配上传的 Source files -> 填写 Remote directory