其实我不呆 發表於 2025-9-30 18:38:00

Jenkins+IIS+Bonobo.Git.Server 搭建适用dotnet开发者的小团队的devops环境

<blockquote>
<p><strong>前言:</strong></p>
<p><span style="background-color: initial">1、在一个小团队里面,可能我们既是开发(前端+后端)也是运维还是售前售后服务。我们样样都得会,但说实话,样样都不是很精!但是我们也梦,梦想着一切能像大厂那样,开发是开发,运维是运维,各司其职。作为一个从后端开发一路走过来的我,今天也越俎代庖,来谈一件运维的事:IIS环境下的dotnet core应用程序的自动部署。一则是为自己留一个备忘,二则是为和我们有相似环境的同仁提供一个借鉴于参考。不足之处勿喷!</span></p>
<p><span style="background-color: initial">2、Java开发的朋友们请滑走!玩k8s+docker的朋友们请滑走!</span></p>
<p>3、本篇将按照如下段落进行整理:</p>
<ul>
<li>环境介绍</li>
<li>在本地Windoss Server 2022服务器上安装Jenkins</li>
<li>在云端Windows Server 2022应用程序服务器上准备:IIS+Open SSH Server部署</li>
<li>一步一步带你实现自动化部署一个.net core应用程到云端服务器</li>
<li>附加:如果私有化部署了nuget服务器,在Jenkins中如何处理</li>
</ul>
</blockquote>
<p>&nbsp;</p>
<p><strong><span style="text-decoration: underline"><span style="color: rgba(255, 0, 0, 1); text-decoration: underline">从此告别:编译 &gt; 打包 &gt; 登录服务器 &gt; 上传程序包 &gt;&nbsp; 复制程序包 &gt; 停止IIS站点 &gt; 解压程序包 &gt; 开启IIS站点&nbsp; 这样一系列重复、低效、繁琐的动作!!!!</span></span></strong></p>
<p>&nbsp;</p>
<p><strong>一、环境介绍</strong></p>
<p>1、在本地有2台服务器:</p>
<ul>
<li>服务器(10.10.18.3)部署与开发一样的环境,并安装Jenkins</li>
<li>服务器(10.10.18.4)本地的nuget服务 与 Bonobo.Git.Server服务</li>
</ul>
<table style="width: 100%" border="0" align="left">
<tbody>
<tr>
<td>
<p>说明:</p>
<p>  (1)为什么会有本地的nuget服务:在长久的开发过程中团队已经形成了一些固有的程序包,它大大提高了开发效率,但是它又不适合上传到公共的nuget仓库,所以便有了本地的nuget服务。</p>
<p>  (2)Bonobo.Git.Server服务是团队历史以来都在使用的私有git仓库,<span style="color: rgba(255, 0, 0, 1)"><strong>它已经没有gitee等当代的git仓库那么先进</strong></span>,但是团队也没有更换的勇气,简单设置一下也<span style="color: rgba(255, 0, 0, 1)"><strong>能够和Jenkins配合着使用</strong>。</span></p>
<p>  (3)以上两款,都是开源的项目,拿来就可以本地部署,有兴趣的朋友可以打开:BaGet——本地nuget服务&nbsp; 和&nbsp; &nbsp;Bonobo.Git.Server本地的Git仓库</p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>2、云端有2台服务器:IP地址分别是:1.1.1.1和2.2.2.2。在其上都部署IIS和Open SSH Server。&nbsp;</p>
<p>&nbsp;</p>
<p><strong>二、在本地的Windows Server 2022服务器上安装Jenkins</strong></p>
<p>Jenkins的安装,网上相关的篇章已经太多了,此处不再赘述。随便推荐一篇:Windows系统下Jenkins安装配置【新手教学】_jenkins windows-CSDN博客</p>
<p>同时,在此服务器上,部署上与开发一样的环境。&nbsp;</p>
<p>&nbsp;</p>
<p><strong>三、在云端的Windows Server 2022服务器上准本IIS+Open SSH Server</strong></p>
<p>Windows Server上开启IIS相关的文章也经太多了,此处不再赘述。随便推荐一篇:Windows Server 2019 安装IIS 服务 - 爱吃糖的宝宝 - 博客园 (cnblogs.com)</p>
<p>在Windows Server 2022上开启Open SSH Server,可以参考这篇:windows server 开启 openssh_windowsserver开启ssh-CSDN博客</p>
<table style="width: 100%" border="0" align="left">
<tbody>
<tr>
<td>
<p>说明:</p>
<p>  (1)或许,你在其他文章中看到,IIS程序自动化部署,需要开启 “Web Deploy组件”,但<strong><span style="color: rgba(255, 0, 0, 1)">Jenkins+IIS的程序自动化部署,不需要开启 “Web Deploy组件”</span></strong>。</p>
<p>  (2)Open SSH Server是什么,为什么要开启。说的直白一点,<strong><span style="color: rgba(255, 0, 0, 1)">在WinServer 上开启Open SSH Server,就可以让Windows机器像Linux机器那样,通过命令行链接并操作电脑</span></strong>。</p>
<p>  (3)<strong><span style="color: rgba(255, 0, 0, 1)">在Win Server上开启Open SSH Server,一定要考虑安全</span></strong>。或许你可以通过防火墙策略,只让你本地机器通过ssh链接等等。</p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;&nbsp;</p>
<p><strong>四、一步一步带你实现自动化部署一个.net core应用程到云端服务器</strong></p>
<p>1、在Jenkins上安装两个必要插件:<strong><span style="color: rgba(255, 0, 0, 1)">Publisher Over SSH</span></strong>、<strong><span style="color: rgba(255, 0, 0, 1)">Generic Webhook Trigger</span></strong>。</p>
<p><img src="https://img2024.cnblogs.com/blog/1432426/202509/1432426-20250927174134506-1418618991.png"></p>
<p><img src="https://img2024.cnblogs.com/blog/1432426/202509/1432426-20250927174213329-1727500964.png"></p>
<p><img src="https://img2024.cnblogs.com/blog/1432426/202509/1432426-20250927174333420-1448200110.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>2、在Jenkins中配置SSH主机(就是第三点配置好的云端服务器)</p>
<p style="text-align: center"><span style="text-decoration: underline"><strong>step-1</strong></span></p>
<p><img src="https://img2024.cnblogs.com/blog/1432426/202509/1432426-20250927173347681-348203264.png"></p>
<p style="text-align: center"><span style="text-decoration: underline"><strong>step-2</strong></span></p>
<p><img src="https://img2024.cnblogs.com/blog/1432426/202509/1432426-20250927173445754-380959840.png"></p>
<p style="text-align: center"><span style="text-decoration: underline"><strong>step-3</strong></span></p>
<p><img src="https://img2024.cnblogs.com/blog/1432426/202509/1432426-20250927173757816-700462832.png"></p>
<p><img src="https://img2024.cnblogs.com/blog/1432426/202509/1432426-20250927175307912-1721946328.png"></p>
<p>&nbsp;&nbsp;</p>
<p>2、在vs 2022中创建一个asp.net core web项目(.net 8.0),并提交到本地git仓库:https://10.10.18.4:8888/TestJenkins.git</p>
<p><img src="https://img2024.cnblogs.com/blog/1432426/202509/1432426-20250928075005906-1165323160.png"></p>
<p>&nbsp;</p>
<p>3、在Jenkins中创建项目并配置</p>
<ul>
<li>创建Jenkins项目</li>
</ul>
<p><img src="https://img2024.cnblogs.com/blog/1432426/202509/1432426-20250927175801657-204650341.png"></p>
<ul>
<li>常规配置项</li>
</ul>
<p><img src="https://img2024.cnblogs.com/blog/1432426/202509/1432426-20250927175913848-890551536.png"></p>
<ul>
<li>源代码管理配置项</li>
</ul>
<p><img src="https://img2024.cnblogs.com/blog/1432426/202509/1432426-20250927180106660-265770440.png"></p>
<ul>
<li>自动构建触发器</li>
</ul>
<p><img src="https://img2024.cnblogs.com/blog/1432426/202509/1432426-20250927180655000-522979867.png"></p>
<p style="text-align: center">&nbsp;将上面拼接的URL,按照下图所示的方法使用:&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1432426/202509/1432426-20250927181516148-937709335.png"></p>
<p style="text-align: center">上面这步操作,<span style="color: rgba(255, 0, 0, 1)"><strong>是确保你的代码提交到Bonobo.Git.Server搭建的git仓库时,能够触发Jenkins自动构建</strong></span>。</p>
<ul>
<li style="text-align: left">执行环境通用设置&nbsp;</li>
</ul>
<p><img src="https://img2024.cnblogs.com/blog/1432426/202509/1432426-20250928074227517-219411591.png"></p>
<ul>
<li>&nbsp;构建步骤</li>
</ul>
<p><img src="https://img2024.cnblogs.com/blog/1432426/202509/1432426-20250928081102335-878230120.png"></p>
<table style="width: 100%" border="0" align="left">
<tbody>
<tr>
<td>
<p>说明:</p>
<ul>
<li>有关dotnet的编译、发布等命令详情,请参考:https://learn.microsoft.com/zh-tw/dotnet/core/tools/dotnet-publish</li>
<li>有些文章说使用<span style="text-decoration: underline"><strong><span style="color: rgba(255, 0, 0, 1); text-decoration: underline">MSBuild来编辑打包程序,那不是针对dotnet core的</span></strong></span>。</li>
<li>如果你是用了本地nuget仓库,上面的命令,可能不会执行成功。请参考文章最后。</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1432426/202509/1432426-20250928082039664-1960734549.png"></p>
<table style="width: 100%" border="0" align="left">
<tbody>
<tr>
<td>
<p>说明:</p>
<ul>
<li>这一步的作用是:<span style="color: rgba(255, 0, 0, 1)"><strong>停止远程服务器上IIS下对应的站点和应用程序池</strong></span>。</li>
<li>命令说明:cmd /c "cd C:\Windows\System32\inetsrv\ &amp; appcmd.exe stop site 6666.TestJenkins &amp; appcmd.exe stop apppool /apppool.name:6666.TestJenkins"</li>
<li>为什么会是这种格式,这里有说明:https://issues.jenkins.io/browse/JENKINS-17809</li>
<li>“appcmd.exe stop site 6666.TestJenkins”——6666.TestJenkins是网站名称</li>
<li>“appcmd.exe stop apppool /apppool.name:6666.TestJenkins”——6666.TestJenkins是应用程序池名称</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p><img src="https://img2024.cnblogs.com/blog/1432426/202509/1432426-20250928142302195-38750024.png"></p>
<p>&nbsp;</p>
<table style="width: 100%" border="0" align="left">
<tbody>
<tr>
<td>
<p>说明:</p>
<ul>
<li>这一步操作,是将本地发布的程序文件,传送到远程主机上。然后在远程主机上复制文件到IIS站点目录下。最后开启应用程序池,开启站点。</li>
<li>命令:cmd /c "cd C:\Users\Administrator\JenkinsWorkspace &amp; xcopy /s /y TestJenkins D:\www\TestJenkins &amp; rd TestJenkins /s /q &amp; cd C:\Windows\System32\inetsrv\ &amp; appcmd.exe start apppool /apppool.name:6666.TestJenkins &amp; appcmd.exe start site 6666.TestJenkins"</li>
<li>cd C:\Users\Administrator\JenkinsWorkspace——是切换cmd的工作目录。此目录下已经由Jenkins自动创建了目录TestJenkins。在TestJenkins目录里面,即是程序文件。</li>
<li>xcopy /s /y TestJenkins D:\www\TestJenkins —— 是将TestJenkins里的程序文件,复制到D:\www\TestJenkins目录。D:\www\TestJenkins就是你站点指向的目录。</li>
<li>&nbsp;rd TestJenkins /s /q ——是删除TestJenkins目录。</li>
<li>appcmd.exe start apppool /apppool.name:6666.TestJenkins —— 开启站点对应的应用程序池</li>
<li>appcmd.exe start site 6666.TestJenkins —— 开启站点。</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<ul>
<li>到此,所有配置完成。点击“Build Now”,开始构建,然后查看最终效果:</li>
</ul>
<p><img src="https://img2024.cnblogs.com/blog/1432426/202509/1432426-20250928145042761-2061948338.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>五、附加:如果你私有化部署了本地Nuget服务,Jenkins中如何处理</strong></p>
<p>1、如果你使用了本地nuget服务,<span style="text-decoration: underline"><strong><span style="color: rgba(255, 0, 0, 1); text-decoration: underline">在Jenkins中执行dotnet publish -c Release发布命令时,极有可能不成功</span></strong></span>。这是,你需要dotnet nuget命令,添加您的本地nuget源。请参考文档:https://learn.microsoft.com/zh-cn/dotnet/core/tools/dotnet-nuget-add-source</p>
<p>2、您可以在Jenkins的命令行输入框中输入以下命令</p>
<p>  dotnet nuget list source——查看Jenkins环境下的nuget包源有哪些</p>
<p>  dotnet nuget config paths——查看Jenkins环境下的nuget包源配置文件的路径(我遇到的情况是:这个路径和我们直接通过控制台输入dotnet命令使用的nuget包源配置文件的路径不一致。)</p>
<p>  <em id="__mceDel"><em id="__mceDel"><em id="__mceDel">dotnet nuget config get all——查看Jenkins环境下的nuget包源配置项有哪些</em></em></em></p>
<p>  </p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/ycb715/p/19115221
頁: [1]
查看完整版本: Jenkins+IIS+Bonobo.Git.Server 搭建适用dotnet开发者的小团队的devops环境