翻过那座山——Jenkins编译发布web程序(.net framework web application)

本文主要是介绍翻过那座山——Jenkins编译发布web程序(.net framework web application),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!
  • 📢本文作者:由webmote 原创
  • 📢作者格言:新的征程,我们面对的不是技术而是人心,人心不可测,海水不可量,唯有技术,才是深沉黑夜中的一座闪烁的灯塔 !

序言

当一根根白发慢慢的爬到我的头上的时候,我敲击键盘的手,也没有20年前那么麻利而迅速了。人谁能摆脱岁月的杀猪刀,而这把杀猪刀对码农来说,看起来格外的锋利。

还记得第一次面对电脑时的兴奋劲吗?还记得第一次玩电脑游戏时的开心吗?

是啊,时光飞逝,那个属于你我他的青葱岁月,终将离我们而去。而我们依然需要在滚滚红尘中努力走好自己的路,作为码农,依然需要双手敲击键盘,码下多年后回头不忍目睹的一行行代码…

1. 那个自动化,你别走

每次看到同事们,辛苦的编译和发布代码,我都忍不住默默打开我的电脑,远程到服务器上,静静的安装最古老而又最勤恳可靠的Jenkins。

多年之前,我已经习惯了打开Jenkins的丑陋界面,打开我的项目,然后点击Build。

而多年之后,我又一次面对Jenkins,这次竟然是闪闪发光的老头。
在这里插入图片描述
时间到底做了什么?

是不是每次点击Build的时候,我们都双手合十,在心中静静的祷告,祈求上天怜悯,让我们一次通过编译和发布?

我不知道是什么原因,不过这也不是我们Care的点。

2. 怎么编译.Net framework的项目?

在这里插入图片描述

  1. 编译.net framework的项目,最简单而直接的命令就是msbuild了。
  2. 那么怎么拥有msbuild呢?最简单的方法就是安装ms visual studio,应该不会有更简单而不易出错的办法了吧!
  3. 怎么使用nuget?我的建议是直接下载nuget,放在系统盘里,这样每个地方都可以调用它了。
  4. 怎么编译具体的.net framework项目呢?让我们先描述以下步骤吧,先使用nuget复原所有的项目包,然后调用msbuild进行编译,然后打包输出,让我们show下代码。
# 以下都是powershell脚本
nuget.exe restore SCPlatformApiServer.sln
$msbuild="C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\bin\msbuild.exe"
&$msbuild "abc.sln" /t:Build /verbosity:normal /p:Configuration=Release /nr:false /clp:ErrorsOnlyif ($LastExitCode -eq 0){echo "build 通过!"
}
else{echo '失败!'exit 1
}

机智如我,使用LastExitCode来判断执行是否成功。

那么,真正的问题来了,怎么编译一个.net framework 的web项目呢?

3. 怎么编译.Net framework的Web项目?

这个问题,如果细细追究确实非常复杂。

web项目不仅仅包含编译的bin下的目录文件,它还包含网页/js/资源/global.asax/webconfig等一系列的文件,我们采用上述方案编译后,立即获得了一个bin目录。

除此之外,并没有其他程序,如果直接分发,则iis都拉不起来这个web程序。

这里,我们必须请求大神DeployOnBuild,搜索微软网站,可以找到类似的介绍。

当然,它有个前提条件,请检查你的web项目的项目文件,看看是否包含如下语句:

 <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /><Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v17.0\WebApplications\Microsoft.WebApplication.targets"  Condition="true"/>

如果没有,那么手工补上去也是可以的。

好了,有了这个发布的支撑,我们可以开心的玩了。

# 以下都是powershell脚本
nuget.exe restore abc.sln
$msbuild="C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\bin\msbuild.exe"
&$msbuild ".abc/abc.csproj" /p:DeployOnBuild=true -restore /p:OutDir="$ENV:WORKSPACE/Bin" /verbosity:normal /p:Configuration=Release /nr:false /clp:ErrorsOnly
if ($LastExitCode -eq 0){echo "build 通过!"
}
else{echo '失败!'exit 1
}

忽略里面的/p:OutDir参数吧,这个目录只有dll,真不行。

然后看看我的打包脚本吧。

# 以下都是powershell脚本
$outdir="$ENV:WORKSPACE/Bin/_PublishedWebsites/SCPlatformApiServer/"
Compress-Archive -Path "$outdir" -DestinationPath "$ENV:WORKSPACE/abc$ENV:BUILD_NUMBER.zip"
Write-Output "修改和打包结束."

打包的内容如下:
在这里插入图片描述
复制到网站目录,即可运行!
在这里插入图片描述

每当你做成一件事情的时候,心中总会升起一股暖流,也许这就是我们努力的理由!

结语

Jenkins是个非常好的工具,不过自从用了gitlab的ci后,这个用途越来越少了。

👓都看到这了,还在乎点个赞吗?

👓都点赞了,还在乎一个收藏吗?

👓都收藏了,还在乎一个评论吗?

这篇关于翻过那座山——Jenkins编译发布web程序(.net framework web application)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/394771

相关文章

Node.js net模块的使用示例

《Node.jsnet模块的使用示例》本文主要介绍了Node.jsnet模块的使用示例,net模块支持TCP通信,处理TCP连接和数据传输,具有一定的参考价值,感兴趣的可以了解一下... 目录简介引入 net 模块核心概念TCP (传输控制协议)Socket服务器TCP 服务器创建基本服务器服务器配置选项服

Docker部署Jenkins持续集成(CI)工具的实现

《Docker部署Jenkins持续集成(CI)工具的实现》Jenkins是一个流行的开源自动化工具,广泛应用于持续集成(CI)和持续交付(CD)的环境中,本文介绍了使用Docker部署Jenkins... 目录前言一、准备工作二、设置变量和目录结构三、配置 docker 权限和网络四、启动 Jenkins

将java程序打包成可执行文件的实现方式

《将java程序打包成可执行文件的实现方式》本文介绍了将Java程序打包成可执行文件的三种方法:手动打包(将编译后的代码及JRE运行环境一起打包),使用第三方打包工具(如Launch4j)和JDK自带... 目录1.问题提出2.如何将Java程序打包成可执行文件2.1将编译后的代码及jre运行环境一起打包2

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

定价129元!支持双频 Wi-Fi 5的华为AX1路由器发布

《定价129元!支持双频Wi-Fi5的华为AX1路由器发布》华为上周推出了其最新的入门级Wi-Fi5路由器——华为路由AX1,建议零售价129元,这款路由器配置如何?详细请看下文介... 华为 Wi-Fi 5 路由 AX1 已正式开售,新品支持双频 1200 兆、配有四个千兆网口、提供可视化智能诊断功能,建

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

解决JavaWeb-file.isDirectory()遇到的坑问题

《解决JavaWeb-file.isDirectory()遇到的坑问题》JavaWeb开发中,使用`file.isDirectory()`判断路径是否为文件夹时,需要特别注意:该方法只能判断已存在的文... 目录Jahttp://www.chinasem.cnvaWeb-file.isDirectory()遇

JavaWeb-WebSocket浏览器服务器双向通信方式

《JavaWeb-WebSocket浏览器服务器双向通信方式》文章介绍了WebSocket协议的工作原理和应用场景,包括与HTTP的对比,接着,详细介绍了如何在Java中使用WebSocket,包括配... 目录一、概述二、入门2.1 POM依赖2.2 编写配置类2.3 编写WebSocket服务2.4 浏

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma