简述

Jenkins是一个用Java编写的开源的持续集成工具

引用项目

  • GitLab

    GitLab 是一个用于仓库管理系统的开源项目

  • Jenkins

    Jenkins是一个开源软件持续集成项目

  • Jexus

    Jexus Web Server,简称JWS,是Linux平台上 的一款ASP.NET WEB服务器

使用场景1

GitLab (源代码管理) -> 项目(ASP.NET) -> Jenkins (持续集成 Window) -> Jexus (Linux ASP.NET Web服务器)

因为编译ASP.NET依赖Window编译工具,所以需要安装在Window系统,在Linux 只能编译.NET Core的项目

GitLab 配置

1.创建一个ASP.NET项目Pull到GitLab中

GitLab

本地运行效果:
ASP.NET Run

2.创建新用户用于自动化构建

当前创建了用户名:==jenkins==

用于构建工作,然后分配项目权限
为了方便管理,我是建立一个群组给jenkins然后工程项目设置共享的群组,结果如下:

GitLab项目共享

生成 SSH 公钥

打开 Git Bash 工具

1
2
3
4
5
# 生成公钥
$ ssh-keygen -t rsa -C "GitLab用户的邮箱" -b 4096
# 查看公钥
$ cd ~/.ssh
$ ls

Git - 生成SSH 公钥

文件说明:

  • id_rsa - 私钥
  • id_rsa.pub - 公钥

查看id_rsa.pub (公钥),添加到Gitlab的SSH密钥中

1
2
# 查看id_rsa.pub (公钥)
$ cat id_rsa.pub

GitLab SSH密钥

可以使用 git clone 命令来检查是否能正确使用

Jenkins 配置

Jenkins 插件管理

选择Jenkins -> 系统管理 -> 管理插件

需要安装插件

  • Git plugin (从源代码管理GitLab下载代码)
  • MSBuild Plugin (使用MSBuild编译ASP.NET项目)
  • Publish Over SSH (构建完成后使用SSH同步到Linux服务器)
配置SSH

点击【系统管理】-> 【系统设置】配置 Publish over SSH

Jenkins  使用

配置Git 和 MSBuild

点击【系统管理】-> 【Global Tool Configuration】配置 SSH remote hosts 配置
配置 Git 和 MSBuild 信息

Jenkins 使用

Jenkins 使用

1
2
3
4
5
6
7

# 重启Jenkins (Window系统)
$ net stop jenkins
$ net start jenkins

# 重启Jenkins (Linux系统)
$ sudo service jenkins restart

或者点击读取设置重置

Jenkins  使用

建立项目配置

  1. 新建配置

Jenkins 使用

  1. 源代码管理配置

Jenkins 使用

添加GitLab代码仓位置地址,并配置鉴权方式,我是使用“SSH Username with private key”方式,将之前生成的私钥(id_rsa)和用户名分别填进去就可以了

3.构建触发器

按需选择促发事件

Jenkins 使用

4.构建配置

Jenkins  使用

使用配置好的MSBuild进行编译,更多命令参数可以查看 -> MSBuild官方参数说明

编译完后可以接入脚本做后期发布操作,所以可以加上执行“Execute Windwos batch command”

Jenkins  使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
@echo off
echo '**************************** 开始进行打包文件压缩 ****************************'
echo 当前目录:%cd%
:当前项目目录
set Root=%cd%
:打包输出目录
set OutputDIR=%Root%\build\
:打包输出全路径
set OutputFullPath=%OutputDIR%Web.zip
:需要压缩目录
set ProjectZipPath=%Root%\Project\Web\

echo 信息如下:
echo 输出目录:%OutputDIR%
echo 打包输出全路径: %OutputFullPath%
echo 需要压缩目录: %ProjectZipPath%


:判断文件是否存在,没有则删除
if not exist "%OutputDIR%" (
mkdir "%OutputDIR%"
)else echo "项目输出目录已存在"

:定位项目目录
cd "%ProjectZipPath%"

:压缩
rar a -r "%OutputFullPath%"

echo 压缩成功!输出文件位置: "%OutputFullPath%"


echo '**************************** 开始进行打包文件压缩 ****************************'

:移动压缩文件
move "%OutputFullPath%" F:\www\Test
cd F:\www\Test\
rar x Web.zip -y
del F:\www\Test\Web.zip

echo 部署成功!部署文件位置: F:\www\Test\Web.zip

注意这里用到rar命令,该程序一般在C:\Program Files\WinRAR\目录下,为了方便调用我将它加到环境变量里面,这样才能直接调用rar命令

Jenkins  使用

5.执行效果

输出结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
Started by user root
Building in workspace F:\Program Files (x86)\Jenkins\workspace\NetDemo - Build
> F:\Program Files\Git\bin\git.exe rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
> F:\Program Files\Git\bin\git.exe config remote.origin.url git@192.168.124.128:HuiMei/NetDemo.git # timeout=10
Fetching upstream changes from git@192.168.124.128:HuiMei/NetDemo.git
> F:\Program Files\Git\bin\git.exe --version # timeout=10
using GIT_SSH to set credentials
> F:\Program Files\Git\bin\git.exe fetch --tags --progress git@192.168.124.128:HuiMei/NetDemo.git +refs/heads/*:refs/remotes/origin/*
> F:\Program Files\Git\bin\git.exe rev-parse "refs/remotes/origin/master^{commit}" # timeout=10
> F:\Program Files\Git\bin\git.exe rev-parse "refs/remotes/origin/origin/master^{commit}" # timeout=10
Checking out Revision 98a5f45299f8a1c189e88cbdcee0d1eca767017b (refs/remotes/origin/master)
> F:\Program Files\Git\bin\git.exe config core.sparsecheckout # timeout=10
> F:\Program Files\Git\bin\git.exe checkout -f 98a5f45299f8a1c189e88cbdcee0d1eca767017b
> F:\Program Files\Git\bin\git.exe rev-list 98a5f45299f8a1c189e88cbdcee0d1eca767017b # timeout=10
Path To MSBuild.exe: C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe
Executing the command cmd.exe /C " "C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" /t:Rebuild /p:Configuration=Release;Platform=AnyCPU Project/Web/Web.csproj " && exit %%ERRORLEVEL%% from F:\Program Files (x86)\Jenkins\workspace\NetDemo - Build
[NetDemo - Build] $ cmd.exe /C " "C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" /t:Rebuild /p:Configuration=Release;Platform=AnyCPU Project/Web/Web.csproj " && exit %%ERRORLEVEL%%
Microsoft (R) 生成引擎版本 14.0.24720.0
版权所有(C) Microsoft Corporation。保留所有权利。

生成启动时间为 2017/5/18 14:51:15。
项目中不存在 BeforeTargets 特性中的“C:\Program Files (x86)\MSBuild\Microsoft\NuGet\Microsoft.NuGet.targets (186,61)”位置列出的目标“BeforeGenerateProjectPriFile”,将忽略该目标。
项目中不存在 BeforeTargets 特性中的“C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.targets (843,131)”位置列出的目标“MvcBuildViews”,将忽略该目标。
项目“F:\Program Files (x86)\Jenkins\workspace\NetDemo - Build\Project\Web\Web.csproj”在节点 1 上(Rebuild 个目标)。
CoreClean:
正在删除文件“F:\Program Files (x86)\Jenkins\workspace\NetDemo - Build\Project\Web\bin\Web.dll.config”。
正在删除文件“F:\Program Files (x86)\Jenkins\workspace\NetDemo - Build\Project\Web\bin\Web.dll”。
正在删除文件“F:\Program Files (x86)\Jenkins\workspace\NetDemo - Build\Project\Web\bin\Web.pdb”。
正在删除文件“F:\Program Files (x86)\Jenkins\workspace\NetDemo - Build\Project\Web\obj\Release\Web.csprojResolveAssemblyReference.cache”。
正在删除文件“F:\Program Files (x86)\Jenkins\workspace\NetDemo - Build\Project\Web\obj\Release\Web.dll”。
正在删除文件“F:\Program Files (x86)\Jenkins\workspace\NetDemo - Build\Project\Web\obj\Release\Web.pdb”。
GenerateTargetFrameworkMonikerAttribute:
正在跳过目标“GenerateTargetFrameworkMonikerAttribute”,因为所有输出文件相对于输入文件而言都是最新的。
CoreCompile:
C:\Program Files (x86)\MSBuild\14.0\bin\csc.exe /noconfig /nowarn:1701,1702 /nostdlib+ /errorreport:prompt /warn:4 /define:TRACE /highentropyva- /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Microsoft.CSharp.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.ComponentModel.DataAnnotations.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Configuration.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Core.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Data.DataSetExtensions.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Data.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Drawing.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.EnterpriseServices.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Web.ApplicationServices.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Web.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Web.DynamicData.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Web.Entity.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Web.Extensions.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Web.Services.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Xml.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Xml.Linq.dll" /debug:pdbonly /optimize+ /out:obj\Release\Web.dll /ruleset:"E:\Program Files\Team Tools\Static Analysis Tools\\Rule Sets\MinimumRecommendedRules.ruleset" /target:library /utf8output Index.aspx.cs Index.aspx.designer.cs Properties\AssemblyInfo.cs "C:\Windows\TEMP\.NETFramework,Version=v4.0.AssemblyAttributes.cs"
_CopyAppConfigFile:
正在将文件从“Web.config”复制到“bin\Web.dll.config”。
CopyFilesToOutputDirectory:
正在将文件从“obj\Release\Web.dll”复制到“bin\Web.dll”。
Web -> F:\Program Files (x86)\Jenkins\workspace\NetDemo - Build\Project\Web\bin\Web.dll
正在将文件从“obj\Release\Web.pdb”复制到“bin\Web.pdb”。
已完成生成项目“F:\Program Files (x86)\Jenkins\workspace\NetDemo - Build\Project\Web\Web.csproj”(Rebuild 个目标)的操作。

已成功生成。
0 个警告
0 个错误

已用时间 00:00:00.20
[NetDemo - Build] $ cmd /c call C:\Windows\TEMP\hudson5880815456699306038.bat
'**************************** 开始进行打包文件压缩 ****************************'
当前目录:F:\Program Files (x86)\Jenkins\workspace\NetDemo - Build
信息如下:
输出目录:F:\Program Files (x86)\Jenkins\workspace\NetDemo - Build\build\
打包输出全路径: F:\Program Files (x86)\Jenkins\workspace\NetDemo - Build\build\Web.zip
需要压缩目录: F:\Program Files (x86)\Jenkins\workspace\NetDemo - Build\Project\Web\
"项目输出目录已存在"

RAR 5.01 版权所有 (c) 1993-2013 Alexander Roshal 1 十二月 2013
已注册给 State Grid Corporation Of China

正在创建 压缩包 F:\Program Files (x86)\Jenkins\workspace\NetDemo - Build\build\Web.zip

正在添加 AssemblyInfo.cs  1% OK
正在添加 bin\Web.dll  8% OK
正在添加 bin\Web.dll.config  8% OK
正在添加 bin\Web.pdb  25% OK
正在添加 Index.aspx  25% OK
正在添加 Index.aspx.cs  26% OK
正在添加 Index.aspx.designer.cs  27% OK
正在添加 obj\Release\Web.csproj.FileListAbsolute.txt  28% OK
正在添加 obj\Release\Web.csprojResolveAssemblyReference.cache  32% OK
正在添加 obj\Release\Web.dll  39% OK
正在添加 obj\Release\Web.pdb  56% OK
正在添加 Properties\AssemblyInfo.cs  57% OK
正在添加 Web.config  58% OK
正在添加 Web.csproj  65% OK
正在添加 Web.csproj.FileListAbsolute.txt  66% OK
正在添加 Web.csproj.user  68% OK
正在添加 Web.csprojResolveAssemblyReference.cache  72% OK
正在添加 Web.Debug.config  74% OK
正在添加 Web.dll  81% OK
正在添加 Web.dll.config  81% OK
正在添加 Web.pdb  98% OK
正在添加 Web.Release.config 100% OK
正在添加 obj\Release  OK
正在添加 bin  OK
正在添加 obj  OK
正在添加 Properties  OK
完成
压缩成功!输出文件位置: "F:\Program Files (x86)\Jenkins\workspace\NetDemo - Build\build\Web.zip"
'**************************** 开始进行打包文件压缩 ****************************'
移动了 1 个文件。

RAR 5.01 版权所有 (c) 1993-2013 Alexander Roshal 1 十二月 2013
已注册给 State Grid Corporation Of China


正在从 Web.zip 解压缩

正在解压缩 AssemblyInfo.cs  4% OK
正在解压缩 bin\Web.dll  13% OK
正在解压缩 bin\Web.dll.config  15% OK
正在解压缩 bin\Web.pdb  21% OK
正在解压缩 Index.aspx  23% OK
正在解压缩 Index.aspx.cs  24% OK
正在解压缩 Index.aspx.designer.cs  27% OK
正在解压缩 obj\Release\Web.csproj.FileListAbsolute.txt  28% OK
正在解压缩 obj\Release\Web.csprojResolveAssemblyReference.cache  33% OK
正在解压缩 obj\Release\Web.dll  42% OK
正在解压缩 obj\Release\Web.pdb  48% OK
正在解压缩 Properties\AssemblyInfo.cs  52% OK
正在解压缩 Web.config  54% OK
正在解压缩 Web.csproj  63% OK
正在解压缩 Web.csproj.FileListAbsolute.txt  65% OK
正在解压缩 Web.csproj.user  68% OK
正在解压缩 Web.csprojResolveAssemblyReference.cache  72% OK
正在解压缩 Web.Debug.config  77% OK
正在解压缩 Web.dll  86% OK
正在解压缩 Web.dll.config  88% OK
正在解压缩 Web.pdb  94% OK
正在解压缩 Web.Release.config  98% OK
全部OK
部署成功!部署文件位置: F:\www\Test\Web.zip
Finished: SUCCESS

文件已经部署到F:\www\Test\中

Jenkins  使用

使用场景2

GitLab (源代码管理) -> 项目(Java) -> Jenkins (持续集成 CentOS) -> Tomcat (Web服务器)

需要插件

  • Maven Integration plugin

配置

Maven Home

Jenkins  使用

点击【系统管理】-> 【Global Tool Configuration】 配置Maven信息

参考资料