一、背景

    以前在发布系统的时候,总是需要经过本地合并代码 >编译 >发布到本地 >拷贝代码到远程服务器 >停止掉服务器上的应用池 >将要发布的文件替换原文件 >重启应用程序池 >打开系统观察系统是否正常启动,一套下来差不多一个小时的时间就过去了,如果这时候某个同事说他的代码没有提交完,那么又需要重复一遍上面的操作过程,时间又得一个小时。那么有没有什么工具可以代替认为的去执行上面这一些工作呢? 有, 那就是今天需要介绍 Jenkins。
    Jenkins是一个开源软件项目,源码地址:https://gitee.com/mirrors/jenkins?utm_source=alading&utm_campaign=repo,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

说在前面

  1. 本文中所有描述的操作均是基于 Windows 环境。
  2. Jenkins需要安装在项目最终发布的服务器(计算机)上;
  3. 服务器允许访问外网及允许被外网访问;
  4. 建议部署在需要高频发布版本的开发环境,不建议部署在生产环境;

二、Jenkins的安装与配置

2.1 安装前准备

2.1.1 安装 jdk

由于Jenkins是java语言开发的,因需要jdk环境。

  • 打开jdk下载页面https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html,下载jdk安装包。
  • 双击打开下载好的安装包文件,进行安装(一路点击“下一步”),等待安装完成后.
  • 为验证是否安装成功,Win+R 打开运行窗口,输入 cmd(或在开始菜单中搜索“命令提示符”),在打开的的命令行窗口中输入 java -version 之后出现 java 版本号信息时,则表是jdk已安装好了。

2.1.2 下载Jenkins

打开Jenkins安装包下载页面:https://www.jenkins.io/download/

jenkins iOS 自动编译 jenkins自动化发布_Windows


选择要运行的操作系统环境,由于本文介绍的是Windows环境下的使用,故选择 Windows,点击 Windows 将下载安装包。

2.2 Jenkins 安装

2.2.1 开始安装

双击文件 jenkins.msi 打开安装引导程序。

jenkins iOS 自动编译 jenkins自动化发布_jenkins iOS 自动编译_02

点击 Next

jenkins iOS 自动编译 jenkins自动化发布_Windows_03


设置好安装路径后,点击 Next

jenkins iOS 自动编译 jenkins自动化发布_Windows_04


选择Jenkins登陆类型

jenkins iOS 自动编译 jenkins自动化发布_Windows_04


点击 Next

jenkins iOS 自动编译 jenkins自动化发布_Windows_06


设置端口号,默认端口号为8080,也可以修改为其他端口号,点击Test Pirt测试端口号是否可用,点击 Next

jenkins iOS 自动编译 jenkins自动化发布_Windows_07


指定jdk安装路径,设置完成就点击 Next

jenkins iOS 自动编译 jenkins自动化发布_jenkins iOS 自动编译_08


点击 Next

jenkins iOS 自动编译 jenkins自动化发布_Windows_09


点击Install

jenkins iOS 自动编译 jenkins自动化发布_Jenkins_10


开始安装

jenkins iOS 自动编译 jenkins自动化发布_Web_11


等待安装完成,点击Finish完成Jenkins安装。

2.2.2 配置

使用浏览器打开地址:http://localhost:8080,8080为安装时初始化的端口号。待页面显示下面结果。

默认情况下,您的Jenkins运行在 https://localhost:8080/。 可以通过编辑来更改 jenkins.xml 它,该文件位于您的安装目录中。该文件也是更改其他引导配置参数(例如JVM选项,HTTPS设置等)的地方。

jenkins iOS 自动编译 jenkins自动化发布_Jenkins_12


按照给定的路径找到文件initialAdminPassword,用记事本打开,并将文件中的密码复制粘贴到上图中的输入框中,点击继续按钮

稍等片刻,直至页面显示如下内容:

jenkins iOS 自动编译 jenkins自动化发布_jenkins iOS 自动编译_13


点击安装推荐的插件开始安装插件

jenkins iOS 自动编译 jenkins自动化发布_Web_14


jenkins iOS 自动编译 jenkins自动化发布_jenkins iOS 自动编译_15


等待插件安装完成,安装过程可能需要持续数分钟,具体视网速情况而定。安装完成后将提示创建管理员账号,如下图,

jenkins iOS 自动编译 jenkins自动化发布_Web_16


填写账号密码等信息后,点击保存并完成

jenkins iOS 自动编译 jenkins自动化发布_jenkins iOS 自动编译_17


继续点击保存并完成

jenkins iOS 自动编译 jenkins自动化发布_jenkins iOS 自动编译_18


点击开始使用Jenkins,进入管理界面

jenkins iOS 自动编译 jenkins自动化发布_jenkins iOS 自动编译_19

2.2.3 安装必要插件

点击左侧 Manage Jenkins 菜单,找到 Manage Plugins,点击进入插件管理界面。

jenkins iOS 自动编译 jenkins自动化发布_jenkins iOS 自动编译_20


选择可选插件,并在上方的搜索框中输入 PowerShell

jenkins iOS 自动编译 jenkins自动化发布_Web_21


点击“直接安装”,再点击安装完成后重启Jendens(空闲时),待安装后会自动重启Jenkins,

还可以安装其他需要的插件如,钉钉消息推送时会用到的 DingTask 等插件

三、自动部署示例

示例针对的项目是基于.Net Core 创建的Web项目,故添加项目的配置内容可能读者实际情况存在一些差异。

添加项目

进入Jenkins管理首页,点击“新建Item”,如下图所示

jenkins iOS 自动编译 jenkins自动化发布_Web_22

输入项目名称,并选择 Freestyle project,点击确定按钮,进入项目配置界面。

jenkins iOS 自动编译 jenkins自动化发布_Windows_23

General(常规)

在“描述”中添加必要的描述信息

源码管理

选择Git,并在“Repositories”(仓储)中指定“Repository URL”(仓储地址)如:https://github.com/earen/TestPro.git“Credentials”(凭证);
“Branches to build”(要进行构建的分支)项中的“指定分支(为空时代表any)”中输入分支名称,如 dev
“源码库浏览器” 选择(自动)

构建

选择增加构建步骤下的 PowerShell“PowerShell > Command”中输入如下命令

#invoke-webrequest -Uri 'https://oapi.dingtalk.com/robot/send?access_token=口令'  -Body '{"msgtype": "text","text": {"content": "CeoDP is buiding..." }}' -ContentType 'application/json' -Method  Post

C:\Windows\System32\inetsrv\appcmd.exe stop apppool /apppool.name:"TestPro"
cd src\TestProWebApi\TestPro.Web.Host
dotnet restore 
dotnet build
#SET ASPNETCORE_ENVIRONMENT=development
Remove-Item C:\wwwroot\TestProPublish -Recurse -Force -Confirm:$false
New-Item C:\wwwroot\TestProPublish -type directory
dotnet publish TestPro.Web.Host.csproj -o C:\wwwroot\TestProPublish
cd C:\wwwroot\TestProPublish
copy TestPro.* F:/wwwroot/1800/dev
C:\Windows\System32\inetsrv\appcmd.exe start apppool /apppool.name:"TestPro"

#invoke-webrequest -Uri 'https://oapi.dingtalk.com/robot/send?access_token=口令'  -Body '{"msgtype": "text","text": {"content": "TestPro is updated! check: http://localhost:8101/" }}' -ContentType 'application/json' -Method  Post

勾选下方的“Use PowerShell profile”

命令说明:

  • “#invoke-webrequest” 开头的消息是为了推送钉钉群消息
  • “C:\Windows\System32\inetsrv\appcmd.exe stop apppool /apppool.name:"TestPro"” 停止应用程序池 TestPro
  • “cd TestProWebApi\TestPro.Web.Host” 进入目录 TestWebApi\TestPro.Web.Host
  • “dotnet restore ” 还原项目包文件
  • “dotnet build” 编译项目
  • “#SET ASPNETCORE_ENVIRONMENT=development” 设置运行环境为开发环境
  • “Remove-Item C:\wwwroot\TestProPublish -Recurse -Force -Confirm:$false” 去掉项 C:\wwwroot\TestProPublish
  • “New-Item C:\wwwroot\TestProPublish -type directory” 添加项 C:\wwwroot\GeoDpPublish
  • “dotnet publish TestPro.Web.Host.csproj -o C:\wwwroot\TestProPublish” 发布项目到目录 C:\wwwroot\TestProPublish
  • “cd C:\wwwroot\TestProPublish” 进入目录 C:\wwwroot\TestProPublish
  • “copy TestPro.* F:/wwwroot/1800/dev” 复制文件名以TestPro.开头的文件到目录 F:/wwwroot/1800/dev中;
  • “C:\Windows\System32\inetsrv\appcmd.exe start apppool /apppool.name:"TestPro"” 启动应用程序池TestPro

发布项目

进入 Jenkins 管理界面, 找到要发布更新项目,点击项目名称,进入下面界面,按照标记所示,点击Build Now按钮,开始构建项目

jenkins iOS 自动编译 jenkins自动化发布_Windows_24


左下角为构建历史(历史发布),点击可以查看历史明细,如下图

jenkins iOS 自动编译 jenkins自动化发布_Web_25


Changes 中列举的内容为 Git 代码提交日志内容