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

news/2025/9/30 18:48:26/文章来源:https://www.cnblogs.com/ycb715/p/19115221

前言:

1、在一个小团队里面,可能我们既是开发(前端+后端)也是运维还是售前售后服务。我们样样都得会,但说实话,样样都不是很精!但是我们也梦,梦想着一切能像大厂那样,开发是开发,运维是运维,各司其职。作为一个从后端开发一路走过来的我,今天也越俎代庖,来谈一件运维的事:IIS环境下的dotnet core应用程序的自动部署。一则是为自己留一个备忘,二则是为和我们有相似环境的同仁提供一个借鉴于参考。不足之处勿喷!

2、Java开发的朋友们请滑走!玩k8s+docker的朋友们请滑走!

3、本篇将按照如下段落进行整理:

  • 环境介绍
  • 在本地Windoss Server 2022服务器上安装Jenkins
  • 在云端Windows Server 2022应用程序服务器上准备:IIS+Open SSH Server部署
  • 一步一步带你实现自动化部署一个.net core应用程到云端服务器
  • 附加:如果私有化部署了nuget服务器,在Jenkins中如何处理

 

从此告别:编译 > 打包 > 登录服务器 > 上传程序包 >  复制程序包 > 停止IIS站点 > 解压程序包 > 开启IIS站点  这样一系列重复、低效、繁琐的动作!!!!

 

一、环境介绍

1、在本地有2台服务器:

  • 服务器(10.10.18.3)部署与开发一样的环境,并安装Jenkins
  • 服务器(10.10.18.4)本地的nuget服务 与 Bonobo.Git.Server服务

说明:

  (1)为什么会有本地的nuget服务:在长久的开发过程中团队已经形成了一些固有的程序包,它大大提高了开发效率,但是它又不适合上传到公共的nuget仓库,所以便有了本地的nuget服务。

  (2)Bonobo.Git.Server服务是团队历史以来都在使用的私有git仓库,它已经没有gitee等当代的git仓库那么先进,但是团队也没有更换的勇气,简单设置一下也能够和Jenkins配合着使用

  (3)以上两款,都是开源的项目,拿来就可以本地部署,有兴趣的朋友可以打开:BaGet——本地nuget服务  和   Bonobo.Git.Server本地的Git仓库

 

2、云端有2台服务器:IP地址分别是:1.1.1.1和2.2.2.2。在其上都部署IIS和Open SSH Server。 

 

二、在本地的Windows Server 2022服务器上安装Jenkins

Jenkins的安装,网上相关的篇章已经太多了,此处不再赘述。随便推荐一篇:Windows系统下Jenkins安装配置【新手教学】_jenkins windows-CSDN博客

同时,在此服务器上,部署上与开发一样的环境。 

 

三、在云端的Windows Server 2022服务器上准本IIS+Open SSH Server

Windows Server上开启IIS相关的文章也经太多了,此处不再赘述。随便推荐一篇:Windows Server 2019 安装IIS 服务 - 爱吃糖的宝宝 - 博客园 (cnblogs.com)

在Windows Server 2022上开启Open SSH Server,可以参考这篇:windows server 开启 openssh_windowsserver开启ssh-CSDN博客

说明:

  (1)或许,你在其他文章中看到,IIS程序自动化部署,需要开启 “Web Deploy组件”,但Jenkins+IIS的程序自动化部署,不需要开启 “Web Deploy组件”

  (2)Open SSH Server是什么,为什么要开启。说的直白一点,在WinServer 上开启Open SSH Server,就可以让Windows机器像Linux机器那样,通过命令行链接并操作电脑

  (3)在Win Server上开启Open SSH Server,一定要考虑安全。或许你可以通过防火墙策略,只让你本地机器通过ssh链接等等。

  

四、一步一步带你实现自动化部署一个.net core应用程到云端服务器

1、在Jenkins上安装两个必要插件:Publisher Over SSHGeneric Webhook Trigger

image

image

image

 

 

 

2、在Jenkins中配置SSH主机(就是第三点配置好的云端服务器)

step-1

image

step-2

image

step-3

image

image

  

2、在vs 2022中创建一个asp.net core web项目(.net 8.0),并提交到本地git仓库:https://10.10.18.4:8888/TestJenkins.git

image

 

3、在Jenkins中创建项目并配置

  • 创建Jenkins项目

image

  • 常规配置项

image

  • 源代码管理配置项

image

  • 自动构建触发器

image

 将上面拼接的URL,按照下图所示的方法使用: 

image

上面这步操作,是确保你的代码提交到Bonobo.Git.Server搭建的git仓库时,能够触发Jenkins自动构建

  • 执行环境通用设置 

image

  •  构建步骤

image

说明:

  • 有关dotnet的编译、发布等命令详情,请参考:https://learn.microsoft.com/zh-tw/dotnet/core/tools/dotnet-publish
  • 有些文章说使用MSBuild来编辑打包程序,那不是针对dotnet core的
  • 如果你是用了本地nuget仓库,上面的命令,可能不会执行成功。请参考文章最后。

 

image

说明:

  • 这一步的作用是:停止远程服务器上IIS下对应的站点和应用程序池
  • 命令说明:cmd /c "cd C:\Windows\System32\inetsrv\ & appcmd.exe stop site 6666.TestJenkins & appcmd.exe stop apppool /apppool.name:6666.TestJenkins"
  • 为什么会是这种格式,这里有说明:https://issues.jenkins.io/browse/JENKINS-17809
  • “appcmd.exe stop site 6666.TestJenkins”——6666.TestJenkins是网站名称
  • “appcmd.exe stop apppool /apppool.name:6666.TestJenkins”——6666.TestJenkins是应用程序池名称

 

image

 

说明:

  • 这一步操作,是将本地发布的程序文件,传送到远程主机上。然后在远程主机上复制文件到IIS站点目录下。最后开启应用程序池,开启站点。
  • 命令:cmd /c "cd C:\Users\Administrator\JenkinsWorkspace & xcopy /s /y TestJenkins D:\www\TestJenkins & rd TestJenkins /s /q & cd C:\Windows\System32\inetsrv\ & appcmd.exe start apppool /apppool.name:6666.TestJenkins & appcmd.exe start site 6666.TestJenkins"
  • cd C:\Users\Administrator\JenkinsWorkspace——是切换cmd的工作目录。此目录下已经由Jenkins自动创建了目录TestJenkins。在TestJenkins目录里面,即是程序文件。
  • xcopy /s /y TestJenkins D:\www\TestJenkins —— 是将TestJenkins里的程序文件,复制到D:\www\TestJenkins目录。D:\www\TestJenkins就是你站点指向的目录。
  •  rd TestJenkins /s /q ——是删除TestJenkins目录。
  • appcmd.exe start apppool /apppool.name:6666.TestJenkins —— 开启站点对应的应用程序池
  • appcmd.exe start site 6666.TestJenkins —— 开启站点。

 

  • 到此,所有配置完成。点击“Build Now”,开始构建,然后查看最终效果:

image

 

 

五、附加:如果你私有化部署了本地Nuget服务,Jenkins中如何处理

1、如果你使用了本地nuget服务,在Jenkins中执行dotnet publish -c Release发布命令时,极有可能不成功。这是,你需要dotnet nuget命令,添加您的本地nuget源。请参考文档:https://learn.microsoft.com/zh-cn/dotnet/core/tools/dotnet-nuget-add-source

2、您可以在Jenkins的命令行输入框中输入以下命令

  dotnet nuget list source——查看Jenkins环境下的nuget包源有哪些

  dotnet nuget config paths——查看Jenkins环境下的nuget包源配置文件的路径(我遇到的情况是:这个路径和我们直接通过控制台输入dotnet命令使用的nuget包源配置文件的路径不一致。)

  dotnet nuget config get all——查看Jenkins环境下的nuget包源配置项有哪些

  

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/923156.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑开机显示屏表现无信号怎么办 原因及解决方法

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

JDK17新特性梳理

JDK17新特性梳理 一、为什么JDK17生态强制升级: 业界长期 “你发任你发,我用 Java8”,但 Spring Framework 6.0+ 明确要求 Java 17+,Spring Boot 3.2+ 不仅要求 Java 17+,还需依赖 Spring Framework 6.1.1+,且仅…

数据结构学习随笔 第一章

数据结构学习随笔 第一章该内容全部引用于 《数据结构 C 语言 第二版》 严蔚敏 李冬梅 吴伟民 著绪论 只有清楚数据的内在联系,合理地组织数据,才能对它们进行有效的处理,设计出高效的算法。 1.1 数据结构研究的内容…

函数-参数+作用域

参数:定义函数时(参数常见的使用):1. def i(num)  2. def i(num1,num2 = 自己定义)  3.def i(*arg,*kwarg)调用函数时 (参数的传入):位置参数>关键字参数不定长参数:*args:调用函数时使用位置传…

怎么给网站制作二维码毕业设计做网站好的想法

互联网IT外包15年,讲述外包那些事;让您外包项目少花钱,办好事!IT外包最大隐形成本-沟通成本:客户叙述大概需求,IT公司说一做一,最后开发项目细节大堆BUG,毫无用户体验感,最后项目一拖再拖,无限延期!究其原因,客户非IT行内人,对系统功能及流程…

用 Nim 实现英文数字验证码识别

一、背景介绍 验证码识别是图像识别领域的常见任务。本文将使用 Nim 语言 编写一个简洁的工具,调用 Tesseract OCR 来实现英文数字验证码的识别。Nim 拥有接近 C 的性能,同时提供了简洁的语法和强大的标准库,非常适…

vip视频网站怎么做装饰公司网站

2020年7月21日晚,GOG官方宣布提供与Epic商城的集成服务,这也是GOG GALAXY 2.0推出以来又一次与超大型游戏平台达成的合作。现在玩家可以通过GOG GALAXY 2.0管理、安装和启动来自Epic商城的游戏。需要注意的是,因为这次行为是完全官方的&#…

游戏开发与网站开发哪个难wordpress注册邮件

6月9日,在2020阿里云线上峰会上,阿里巴巴集团副总裁、数据技术及产品部负责人朋新宇推出Quick Audience、Quick A两款全新产品,并升级Dataphin和Quick BI两款现有产品。同时,阿里云零售、金融、政务及互联网企业等四大行业数据中台…

思路探索:当大型语言模型遇见数据分析的现实挑战 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

抓紧上车,别再错过啦, Github 开源后台管理平台,Naive UI !!!

嗨,我是小华同学,专注解锁高效工作与前沿AI工具!每日精选开源技术、实战技巧,助你省时50%、领先他人一步。👉免费订阅,与10万+技术人共享升级秘籍!naive-ui-pro 是一套完全免费的企业级中后台系统模板,基于 V…

顺德高端网站招商码头无忧查询系统

foreach函数是PHP中用于遍历数组或对象的函数(且仅用于数组的遍历)。它允许循环遍历数组中的每个元素,并对每个元素执行相同的操作。foreach语句的基本语法如下: foreach ($array as $value) {//执行的操作 }在这个语法中&#x…

惠州附近做商城网站建设哪家好做外贸的怎么建立自己的网站

sprintf()函数 这个函数在 stdio.h中;可以将格式化的数据写入到一个字符串缓冲区中。 int sprintf(char *str, const char *format, ...);str:指向字符数组的指针,即用于存储格式化后字符串的缓冲区。format:格式化字符串&#…

实用指南:电子电气架构 --- 智能座舱域环境感知和人机交互系统

实用指南:电子电气架构 --- 智能座舱域环境感知和人机交互系统pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Co…

【机器学习】朴素贝叶斯法 - 实践

【机器学习】朴素贝叶斯法 - 实践2025-09-30 18:28 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !impor…

网站开发 承接wordpress modernizr

作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量、机器学习、数据可视化、应用统计建模、知识图…

汾阳网站建设用ps网站首页怎么做

文章目录 Dubbo的发展背景单一应用架构垂直应用架构分布式服务架构流动计算架构 RPCRPC的简单原理 DubboDubbo是什么Dubbo作者Dubbo的发展历程Dubbo架构 Dubbo发音: |ˈdʌbəʊ| Dubbo官方网站:http://dubbo.apache.org/ Dubbo是阿里巴巴开发的&#…

【Rust GUI开发入门】编写一个本地音乐播放器(8. 从文件中提取歌曲元信息) - Jordan

本系列教程对应的代码已开源在 Github zeedle 目的是从.mp3/.flac/.wav/...文件中提取歌曲名称/艺术家/音频时长信息/歌词信息/专辑封面 添加依赖 使用lofty这个全能解析库,将其添加到Cargo.toml中: lofty = "0…

Tita项目与绩效一体化管理:重构组织效能的数字化中枢

在数字化转型的深水区,企业正面临一个核心命题:如何让项目管理从成本中心转变为价值创造引擎?Tita项目经营管理一体化平台以”项目-绩效-人才”三位一体为设计原点,通过打破传统管理系统的数据孤岛,构建起覆盖战略…

深入解析:【网络编程】套接字入门:网络字节序与套接字种类剖析

深入解析:【网络编程】套接字入门:网络字节序与套接字种类剖析pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "C…

网站开发google四川网站建设费用

Lucene查询语法,适用于 ELk Kibana 查询 Elasticsearch 构建在 Lucene 之上,过滤器语法和 Lucene 相同。本语法可用于 Kibana 界面的检索和 Grafana 看板对接 ES 的检索规则。 Kibana 上的检索语法Grafana 上的检索语法 全文搜索 在搜索栏输入login&…