Jenkins 发布.NET项目到Windows服务器

网上关于Jenkins发布.NET项目到Windows服务器的文章不多,而很多都已经过时了,而且大部分Jenkins还是安装在windows中的,所以觉得自己摸索一下

一. 环境、准备工作

  • 新建一个.NET 6 website 项目,并且上传到git中。
  • 完成Jenkins的安装 (本例是通过Docker安装的Jenkins)
  • 发布服务器中安装Docker环境

二. Jenkins 添加git认证与安装插件

Jenkins安装好后,进行以下配置和插件安装

我的Jenkins是英文界面,麻烦自行匹配中文,抱歉抱歉。

1. 添加git认证

登录首页后,点击 Manage Jenkins

点击 Credentials

点击 System

点击 Global credentials

点击右上角 Add Credentials

选择对应的认证方式,例子中使用的是gitlab的username + access token,选择 username with password,填入信息后保存。

2. 安装 Publish Over SSH 插件

这个插件用于连接到远程服务器,Linux 和 windows server都可以用

在首页中,点击 Manage Jenkins -> Plugins 进入插件管理页面

点击 Available plugins , 搜索 Publish Over SSH, 勾选后点击 安装且不重启

安装完成后,点击 Manage Jenkins -> System 拖到下方 Publish over SSH 位置,在SSH Server 下点击 Add

在新出现的选项卡中,填入对应信息:

  • name : 自定义服务器名称
  • hostname: 链接地址
  • username: 服务器的登录账号
  • Remote Directory: 自定义远程连接后的默认地址,通常是传输文件的父级目录,我设定的是C:/www/ ,目录下再设置app1、app2等其他程序的目录

坑:注意此处填写的是 /C:/www/,盘符必须带/

点击下方 Advance 后,再点击 Use password authentication, or use a different key 在下方 Password 中填写密码,完成后点击 Save, 这样远程服务器的连接配置就完成了

3. 安装 .NET SDK Support 插件

在Jinkins中编译.net项目,网上的文章不多,且大多数都是用的MSBuilder,这个插件很久没更新了,而且我并没有成功。无意中看到有 .NET SDK Support 插件,而且更新时间较近,只在外网找到一篇文章,所以决定自己照着试试并且研究下。

参考链接

Manage Jenkins -> Plugins -> Avaliable plugins 中搜索 .NET SDK SupportVersion 并安装

Manage Jenkins -> Tools -> .NET SDK installations 中添加.net版本,依照.NET 6为例

点击 Add .Net SDK 后,输入名称.NET 6 (自定义)

.NET Vsersion \ Release \ SDK \ Platform 中选择对应的选项

点击保存后完成

三、配置发布流程方案2:在Jenkins中编译、发布

1. 在windows 服务器中创建站点

在IIS中添加站点,端口、托管方式等设置好,我的站点地址是C:\www\WebTest, 并运行成功

2. 创建Jenkins项目

  1. 在Jenkins首页点击 New Item ,输入名称,选择第一个 Freestyle project , 点击 OK, 创建新的项目

  2. 创建后,在 Source Code Management 中选择 git, Repository URL 中填入 git 地址,Credentials 中选择之前录入的认证信息,如果认证失败,会有红色提醒显示,Branches to build 中填写对应分支。

  3. Build Enviroment 中选择之前创建的.NET版本

  4. Build Step 中添加 Execute shell 步骤,执行命令在Jenkins中编译、发布。

    将 DockerTest 替换成你的.Net项目名称,此处发布文件夹是 publish

    css 复制代码
    cd /var/jenkins_home/workspace/${JOB_NAME}/DockerTest
    dotnet clean DockerTest.csproj --configuration Release
    dotnet restore DockerTest.csproj
    dotnet build DockerTest.csproj --configuration Release
    dotnet publish -c Release -o publish --verbosity detailed

    到此处,建议先保存,然后点击一下 build 尝试运行

    坑:如果你的Jenkins也是Docker版本的,很有可能遇到 Globalization的问题,原因是Jenkins容器内需要安装 libicu-dev

    解决方案:

    进入容器内容内部 docker exec -it -u root <container name> bash

    安装libicu-dev apt-get install libicu-dev

    坑中坑:安装时遇到 Unable to locate package 问题,按照网上的办法更换国内镜像也没有用,最后耗费2个小时,最后在这个网站上找到最新的sources.list并且更换成功了

    解决方案

    备份源列表文件

    mv /etc/apt/sources.list /etc/apt/sources-backup.list

    修改源文件,将下载的文件内容覆盖这个文件中的内容,当然也可以直接替换文件

    vim /etc/apt/sources.list

    执行更新命令

    apt update

    apt upgrade

  5. 在Jenkins中能编译通过后,添加 Send files or execute commands over SSH 步骤,传输文件到远程服务器

    Name 中选择远程服务器

    SourceFile 中添加需要传输的路径地址,由于此处发布的目录是publish,所以地址是 DockerTest/publish/** ** 代表文件夹下所有内容

    Remote Diectory 中输入服务器端的文件夹。路径是Publish Over SSH 插件中配置的默认路径+项目名,此处为 C:/www/dist/WebTest, 这并非网站路径,只是临时存放发布文件用的

    Exec command 中输入远程服务器执行的命令,由于在windows 服务器中,此处多行命令只会执行第一行,所以我用 && 符号合并多行命令成为一条命令,当然也可以创建多个step,每一个step 执行一行命令,算是一个小坑

    %SystemRoot%\System32\inetsrv\appcmd stop apppool /apppool.name:"WebTest" && xcopy /YE C:\www\dist\WebTest\DockerTest\bin\Release\net6.0\publish C:\www\WebTest && %SystemRoot%\System32\inetsrv\appcmd start apppool /apppool.name:"WebTest" && rmdir /s /q "C:\www\dist\WebTest"

    这些命令分别为:

    • 停止网站 (停止了才能修改文件)
    • 复制 www/dist/xxxx 下文件到网站目录
    • 启动网站
    • 删除www/dist/xxxx 下文件

    点击 Save 完成后,最后点击 Build Now 发布,可以看到,网站已经成功访问了

相关推荐
青木沐41 分钟前
Jenkins介绍
运维·jenkins
只会copy的搬运工5 小时前
Jenkins 持续集成部署——Jenkins实战与运维(1)
运维·ci/cd·jenkins
测试杂货铺7 小时前
如何用postman做接口自动化测试及完美的可视化报告?
自动化测试·软件测试·测试工具·职场和发展·jenkins·压力测试·postman
科马9 小时前
【Jenkins】持久化
java·运维·jenkins
编程、小哥哥12 小时前
在 Docker 中部署 Jenkins,并完成项目的构建和发布
servlet·docker·jenkins
_oP_i17 小时前
.NET Core 项目配置到 Jenkins
运维·jenkins·.netcore
coder_pig1 天前
📝小记:Ubuntu 部署 Jenkins 打包 Flutter APK
flutter·ubuntu·jenkins
运维&陈同学2 天前
【Elasticsearch05】企业级日志分析系统ELK之集群工作原理
运维·开发语言·后端·python·elasticsearch·自动化·jenkins·哈希算法
csdn_金手指2 天前
Jenkins持续交付web应用,通过docker制作相关的镜像进行发布部署
运维·jenkins
龙少95433 天前
【SpringBoot中怎么使用ElasticSearch】
spring boot·elasticsearch·jenkins