Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >.Net在Windows上使用Jenkins做CI/CD的那些事

.Net在Windows上使用Jenkins做CI/CD的那些事

作者头像
陈珙
发布于 2020-09-10 10:44:23
发布于 2020-09-10 10:44:23
1.8K00
代码可运行
举报
运行总次数:0
代码可运行

背景

  最近入职了一家新公司,公司各个方面都让我非常的满意,我也怀着紧张与兴奋的心情入职后,在第一天接到了领导给我的第一个任务——把整个项目的依赖引用重新整理并实施项目的CI/CD

  本篇的重点主要分享这次在Windows平台使用Jenkins做.Net Framework的自动化,真是所谓一波N折。

  有关注过我的博客的朋友们,应该知道我之前都是在Linux上实施.Net Core,好不容易把Linux技能点起来,现在玩回Windows+.Net Framework感觉有一种回到钻木取火的年代。

  在实施过程中让我感悟最多的是,dotnet core命令的便捷性,Linux运维的便捷性,下文我有很多构建脚本都是shell脚本来的,当时想着学习一次就不需要学习bat脚本了,最终还是躲不过。

  在远程传送并远程执行命令我折腾得最久,开始想着用FTP与Telnet,谁知道Telnet命令没有附带账号密码参数,脚本不好写,后改成PsExec.exe,使用过程中很多奇怪的问题,后来不得不去折腾OpenSSH,说实话还是SSH好用,直接代替了FTP与PsExec。中间还遇到Jenkins使用本机账号执行的权限问题。所有“坑”的我在下面步骤尽可能给大家规避了。

引用整理

  项目(包含所以依赖的项目)依赖引用丢失,主要体现以下几点:

  1. 官方依赖包没有使用NuGet
  2. 内部项目引用通过本地引用,项目没有拉取则编译失败
  3. NuGet包多个版本的引用
  4. 同属一个解决方案,但是项目分散到各个仓库

  依赖没有规范化对软件工程主要带来以下几点影响:

  1. 缺少代码或者代码路径不一致则无法正常编译通过
  2. 对于新人同事不友好
  3. 实现CI/CD会有很大的阻力

  解决方案与顺序:

  1. 整理组件库到统一解决方案,日后有需要拆分再按需拆分,优先保证需要依赖的在一个方案。
  2. 实现组件库的自动发布到私有Nuget
  3. 整理API项目的依赖,抛弃以前本地依赖的方式,统一使用Nuget
  4. 实现API项目的自动发布到IIS

工具准备

工具名称

下载地址

描述

jdk-8u261-windows-i586.exe

https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

Jenkins依赖

nuget.exe CLI

https://dist.nuget.org/win-x86-commandline/latest/nuget.exe

发布、还原.Net依赖包

MsBuild

https://visualstudio.microsoft.com/zh-hans/vs/community/

msbuild在vs安装程序里

Jenkins

https://www.jenkins.io/zh/download/

git

https://git-scm.com/download/win

OpenSSH服务端

https://github.com/PowerShell/Win32-OpenSSH/releases

远程传输与远程执行命令

 物理部署图

  文章会分享跨网络环境的场景,我们使用了Gitee的企业仓储,Jenkins与Nuget.Server会放在阿里云服务器,机房会开放一台服务器与阿里云服务器进行SSH的通信。

  以上是基本的信息概要,下面会进入具体的实施步骤。

NuGet.Server的部署

  新建一个ASP.Net Web应用程序(.NetFramework),并选择空模板,搜索NuGet.Server选择3.4.1版本安装后,打开Web.config文件设置apiKey,然后就可以部署到47.115.111.58的IIS了。

  官方部署文档可以查看 https://docs.microsoft.com/zh-cn/nuget/hosting-packages/nuget-server

 安装MsBuild

  在服务器47.115.111.58打开通过上面表格的链接下载VS的安装包,点开单个组件选项卡,勾选Msbuild,等待一会即可完成。

配置nuget.exe CLI

  在服务器47.115.111.58根据上面表格nuget.exe CLI,下载后放到一个合适的文件目录,并在【环境变量配置】配置好路径,打开cmd并输入指令nuget help出现以下画面证明成功。

添加NuGet还原源配置项

  在部署Jenkins服务器47.115.111.58,打开C:\Windows\system32\config\systemprofile\AppData\Roaming\NuGet\NuGet.Config,没有的化可以自己建一个,输入以下脚本。

如果没有配置好,接下来的应用项目可能会编译时还原包失败导致无法编译通过。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
    <add key="私有NuGet服务" value="http://47.115.11.58:8008/nuget" />
    <add key="Microsoft Visual Studio Offline Packages" value="C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\" />
  </packageSources>
</configuration>

安装OpenSSH服务端

  根据上面表格的地址下载解压后,在服务器47.115.151.108以管理员启动CMD

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd C:\tools\OpenSSH-Win64
 
#安装服务端
powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1
 
#启动服务
net start ssh-agent
sc config ssh-agent start= auto
net start sshd
sc config sshd start= auto
 
#防火墙打开22端口
#大于等于 Windows Server 2012
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
 
#小于 Windows Server 2012
netsh advfirewall firewall add rule name=sshd dir=in action=allow protocol=TCP localport=22

  这样就可以通过administrator账号或者管理员账号在客户端用ssh登录了。  

  以上是各个服务器基本依赖安装。

安装Jenkins

  在服务器47.115.111.58,先把jdk与git安装好后,点开Jenkins安装,选择默认路径下一步,遇到设置服务登录账户的时候,必须选择以administrator安装,不然后续会有很多执行的权限问题。

如果点击Test Credentials无法通过,可以在运行输入mmc打开策略编辑器,并在计算机配置-[windows设置]-[安全设置]-[本地策略]-[用户权限分配]-[作为服务登录],填写administrator或者您的管理员账号。

  接着点击下一步等待完成后,会弹出一个localhost:8080的页面,根据他的指示初始化界面就可以了。输入完管理员账号后这个时候可以去修改workspace的地址,当时我没有修改地址的时候,因为路径有特殊字符导致无论如何都无法用msbuild编译通过。

  打开C:\Windows\System32\config\systemprofile\AppData\Local\Jenkins.jenkins\config.xml,修改workspaceDir属性的值为C:/jenkins_workspace/${ITEM_FULL_NAME},尽可能给一个简单纯英文的路径。

配置Jenkins

  在主界面点击【Manage Jenkins】-【Configure System】界面,定位到Shell,输入您刚安装的git路径的sh.exe,C:\Program Files\Git\bin\sh.exe

  同样界面定位到SSH Servers点击Add Server把刚刚安装OpenSSL的服务器47.115.151.108填写进去,账号密码是47.115.151.108服务器管理员的账号密码。

  在主界面点击【Manage Jenkins】-【Global Tool Configuration】界面,定位到Git,输入您刚安装的git路径的git.exe,C:\Program Files\Git\bin\git.exe

  到这里Jenkins的配置基本上完成了。

自动发布组件包到NuGet

  新建Freestyle project,并在【源码管理】、【构建】填入您的构建信息,构建脚本我是保存在服务器上,因为保存在服务器上更加可靠

构建脚本shell示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash 
#脚本开始执行
echo '脚本开始执行'

base_path=C:/jenkins_workspace/Librariy
nuget_url=http://47.115.111.58:8008/nuget
nuget_api_key=B82D6DDB-C6F958E8C945

nuget restore $base_path

for project_name in $base_path/*
do

project_path=$project_name
package_path=$project_path/packages

rm -rf $package_path

nuget pack $project_path -Build -IncludeReferencedProjects -Properties Configuration=Release -OutputDirectory $package_path &&
nuget push -ApiKey $nuget_api_key -Source $nuget_url $package_path/*.nupkg

if [ $? -eq 0 ]; then
    echo '发布成功:'$project_name''
else
    echo '发布失败:'$project_name''
fi

done

echo '脚本执行结束'

  以上发布组件包到私有NuGet的步骤就实施完毕了。

自动发布Web应用到IIS

新建Freestyle project,并在【源码管理】、【构建】填入您的构建信息。[Publish Over SSH]插件跟OpenSSL能把编译好的文件发送到相应的服务器,并执行对应的集群分发脚本。

示例构建shell脚本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash 
echo '脚本开始执行'

base_path=C:/jenkins_workspace/API

project_path=$base_path/API.csproj
publish_path=$base_path/publish

rm -rf $publish_path

nuget restore $base_path  && 
MSBuild.exe $project_path  -t:"rebuild;publish;ResolveReferences;_CopyWebApplication" -p:"Configuration=Release;OutputPath=$publish_path"

if [ $? -eq 0 ]; then
    echo '发布成功:'$project_name''
else
    echo '发布失败:'$project_name''
fi

echo '脚本执行结束'

示例分发bat脚本

记得在局域网把相应服务器的共享文件夹启动

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
net use \\192.168.1.2\app "password" /user:"administrator"

xcopy/a/s/h/y  C:\app\ftp\SFNovelAPI \\192.168.1.2\app\API

结束

  以上记录并分享了我在Windows实施自动化的过程与步骤,如果大家有更好的建议与提议,可以在下方评论反馈给我。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
.Net微服务实战之CI/CD
  在软件工程不少的思想、概念来源于建筑工程,大家也喜欢把开发软件比喻成建房子。那么如果说运维是软件的地基,那么框架就是承重墙。起房子就是先打地基,再建承重墙。地基打得越稳,房子才能起得更高。也等同于运维技术越扎实,系统才能更加健壮。
陈珙
2020/07/28
5930
.Net微服务实战之CI/CD
Jenkins基础系统之完整的.net项目编译
在安装jenkins提供的插件时,遇到了国内网络不稳定的问题,解决办法就是更换镜像源,网上好多都是推荐用[清华大学]的镜像,但[清华大学]的镜像服务器的update-center.json文件内部的包引用地址,还是指向的jenkins更新中心。所以需要搭建一个update-center.json提供服务器, 地址(这是我自己搭建,可供大家测试使用):http://jenkins.b-nature.cn:10026/jenkins/updates/update-center.json
sam dragon
2020/04/13
9180
Jenkins+Docker实现CI/CD
看到这一张图,我们就知道践行持续集成(CI)、持续部署(CD),可以简化工作流程,提高工作效率。
用户2032165
2019/04/01
1.2K0
Jenkins+Docker实现CI/CD
devOps:构建篇-Jenkins
基础篇主要介绍了项目管理流程的基础架构设计与一些基本的 node 开发,本篇开始构建系统系列,简单讲述一下 jenkins 与项目管理系统的配合
Cookieboty
2020/10/23
1.3K0
devOps:构建篇-Jenkins
jenkins with gitblit and .net framework and windows
进入安装目录 C:\Windows\System32\config\systemprofile\AppData\Local\Jenkins\.jenkins,打开config.xml文件,找到${JENKINS_HOME}变量,修改为指定盘符,重启jenkins即可.
郑小超.
2021/01/20
9140
.net网站自动化部署-致两年前的遗留的问题
又到一年国庆,终于有了难得的几天空闲,计划陪陪媳妇娃子,再把最近阅读的几本相关书总结梳理下。当然,计划总是美好的,于时接到了一个老朋友电话。大意是他搞了一个.net小网站,部署了4个节点,每次更新程序都是手动复制到4个机器,时不时忘记部署,忘记备份之类的问题,不胜其烦,希望我帮忙想个办法。回想2年前,在做无人货架项目时,也有部分是.net项目,当时自己也没能处理这个问题,当时用了webdeploy,效果并不理想,虽然后来几乎没碰过.net了,这个问题依然萦绕心头。既然有时间,有报酬,何不接此机会弥补两前年的遗憾呢,于时满口应承了下来。想想现在都在谈CI/CD, DevOps.. 过程应该会是相当愉悦的,又是小网站,要求也不是那么高。网站结构如下,非常简单。
Jlion
2022/04/07
8110
.net网站自动化部署-致两年前的遗留的问题
还在用Jenkins?试试Gitlab的CI/CD功能吧,贼带劲!
如果你用Gitlab作为Git仓库的话,使用它的CI/CD功能来实现自动化部署确实很不错!安装一个轻量级gitlab-runner,编写简单的.gitlab-ci.yml脚本文件即可实现。其实我们之前以及介绍过很多种自动化部署方案,比如Jenkins、Gogs+Drone、Gitlab CI/CD,我们可以发现一个共同点,这些方案都离不开Linux命令。所以说要想玩转自动化部署,还是得先玩转Linux命令!
macrozheng
2021/07/27
9130
还在用Jenkins?试试Gitlab的CI/CD功能吧,贼带劲!
dotnet 配置 Gitlab 的 Runner 做 CI 自动构建
今天在少珺小伙伴的协助下,使用了 gitlab 的 runner 给全组的项目做自动的构建。为什么需要使用 Gitlab 的 Runner 做自动构建,原因是之前是用的是 Jenkins 而新建一个底层库项目想要接入自动构建等,需要来回在 Gitlab 和 Jenkins 上配置,大概步骤差不多有 20 步,同时还有一堆 Jenkins 的坑。另外服务器是共有的,有其他组的小伙伴安装了诡异的工具让我的打包不断炸掉。于是我就和头像大人商量使用虚拟机环境的方法,我在空闲的服务器上安装了 VirtualBox 虚拟机,然后在虚拟机部署 Runner 接着在项目接入,这样就可以确定打包的环境,同时迁移服务器也比较方便
林德熙
2020/02/17
2.4K0
Jenkins通过OpenSSH实现Windows下的CI/CD
最近有一个项目,要用windows server服务器,系统是windows server 2012 R2数据中心版,因为服务器比较多,不可能人工去一台一台发布,所以就想看下有没有类似jenkins一样的CI/CD工具,可以批量做项目CI/CD的
李俊鹏
2020/09/10
3.2K0
Jenkins通过OpenSSH实现Windows下的CI/CD
jenkins在windows上自动化部署.Net(.Net Core)项目
  什么是持续集成呢?Continuous integration(CI)。持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。
小世界的野孩子
2019/09/29
1.8K0
jenkins在windows上自动化部署.Net(.Net Core)项目
CentOs8 Linux安装Jenkins、部署并运行springboot项目
vim详解:点击 i 进入编辑模式即可编辑文本,编辑完之后Esc退出编辑模式, :wq 保存退出(注:这里是有【一个冒号+wq】),不保存就直接退出是 :q! (冒号+q+感叹号)
OwenZhang
2021/12/08
6460
CentOs8 Linux安装Jenkins、部署并运行springboot项目
jenkins构建go及java项目
jenkins作为java的好基友,经历过单体项目时代->集群项目时代->容器集群分布式时代,使用稳定可靠,cpu友好(就泪存有点儿难看),如果有问题就。。。
上帝
2021/04/09
5810
jenkins构建go及java项目
如何给 CI CD 服务器搭建上 .NET 5 构建和运行环境
在 2020.11.10 官方正式发布了 .NET 5 正式版。而我花了一周的时间进行踩坑和预研,本文将告诉大家如何在自动化服务器上搭建 dotnet 5 的构建和运行环境
林德熙
2020/11/23
1K0
如何给 CI CD 服务器搭建上 .NET 5 构建和运行环境
基于Jenkins Pipeline的ASP.NET Core持续集成实践
最近在公司实践持续集成,使用到了Jenkins的Pipeline来提高团队基于ASP.NET Core API服务的集成与部署,因此这里总结一下。
Edison Zhou
2019/04/21
1.7K0
Docker+Jenkins+GIT+Tomcat实战持续化集成
| Docker-server | 172.20.6.20 |Docker宿主机
KaliArch
2018/04/22
1.9K1
Docker+Jenkins+GIT+Tomcat实战持续化集成
CI/CD Pipeline之Jenkins部署
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。Jenkins是开源CI&CD软件领导者,提供超过1000个插件来支持构建、部署、自动化,满足任何项目的需要。我们可以用Jenkins来构建和部署我们的项目,比如说从我们的代码仓库获取代码,然后将我们的代码打包成可执行的文件,之后通过远程的ssh工具执行脚本来运行我们的项目。
Power
2025/03/03
970
Jenkins实战
需要提一下,现在新安装的没有这个选项,需要在插件里安装一下 Maven Integration
花落花相惜
2021/12/05
1K0
Jenkins部署码云SpringBoot项目到远程服务器
这里需要在 系统管理->系统设置->Publish over SSH配置远程部署的服务器,如图:
dalaoyang
2018/12/10
4.5K0
Jenkins部署码云SpringBoot项目到远程服务器
基于Jenkins的CICD
首次启动会因为数据卷data目录没有权限导致启动失败,设置data目录写权限(/usr/local/docker/jenkins_docker/data)
九转成圣
2024/04/10
1400
基于Jenkins的CICD
Jenkins 流水线远程部署 .NET Core/Framework 到 IIS
在本章中,将会介绍在 Windows Jenkins 上,编译 .NET Core、.NET Framework 项目,以及远程部署到 IIS 中。
痴者工良
2021/06/29
2.5K0
相关推荐
.Net微服务实战之CI/CD
更多 >
LV.1
广州轻阅网络科技有限公司系统架构师
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验