如何:将Github项目持续集成部署到Nuget

"将Github项目持续集成部署到Nuget"

Posted by 小镇青年 on January 2, 2019

环境

系统:CentOS 7.5.1804 Jenkins:2.138 .NET Core:2.2.100

Personal access tokens

登录Github,按以下路径进行设置

Settings > Developer settings > Personal access tokens > Generate new token

然后选择 repoadmin:repo_hook 中的所有权限,点击生成token即可。

Jenkins中Github插件配置

  • 安装github插件

按以下路径安装插件

Jenkins > 系统管理 > 插件管理

  • 配置Github Server

Jenkins > 系统管理 > 系统设置 > GitHub Servers

指定 API-URL=https://api.github.com ,勾选 Manage hooks。 然后点击添加Credentials,添加内容如下: 类型选择Secret text,然后将github token添加到Secret中,完成后可点击github server中的Test connection测试连接。

新建一个任务

现在可以开始创建任务了,步骤如下

  • 输入任务名称,然后选择构建一个自由风格的软件项目
  • 勾选Github Project,输入项目地址(本示例地址为:https://github.com/zhaobingwang/CSTree/)
  • 源代码管理选择git,然后输入仓库地址(本文示例地址:https://github.com/zhaobingwang/CSTree.git),分支选择master。
  • 选择GitHub hook trigger for GITScm polling触发器
  • 构建步骤,选择执行Shell

本示例Shell脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 编译项目
echo "begin build..."
dotnet build CSTree.Utilities.Core.sln -c Release
echo "build success"

# 创建nuget临时存放目录和归档目录
sudo mkdir /publish/nuget/Route8/$(date +%Y%m%d) -p
sudo mkdir /publish/archives/$(date +%Y%m%d) -p
 
echo "begin pack..."

# 打包项目 CSTree.Utilities.Core 并输出到临时存放目录
echo "pack CSTree.Utilities.Core..."
sudo dotnet pack src/CSTree.Utilities.Core/CSTree.Utilities.Core.csproj -c Release -o /publish/nuget/CSTree.Utilities.Core/$(date +%Y%m%d)
echo "pack CSTree.Utilities.Core success"

# 发布到nuget.org
echo "begin push..."
sudo dotnet nuget push /publish/nuget/CSTree.Utilities.Core/$(date +%Y%m%d)/*.nupkg -k  oy2oocvme7m6lqk7c5oqysybqrn2g3uuvntcawphwbg5ku -s https://api.nuget.org/v3/index.json
echo "push success"

# 归档package
sudo mv /publish/nuget/CSTree.Utilities.Core/$(date +%Y%m%d)/* /publish/archives/$(date +%Y%m%d)

注册webhook

在Jenkins中,进入以下路径

系统管理 > 系统设置 > GitHub > GitHub Servers > 高级

然后点击Re-register hooks for all jobs 此时可在 Github 中查看到github插件自动创建的一个钩子,查看路径如下

Your Github Repository > Setting> Webhooks

结束

至此,Jenkins配置已经完成,当把代码提交到master时,将会自动编译发布一个该项目的nuget包到nuget.org

参考

本示例代码仓库:CSTree

本示例发布的nuget地址:CSTree.Utilities.Core

本文参照晓晨MasterASP.NET Core & Docker & Jenkins 零基础持续集成实战