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

news2024/9/21 4:34:25
  • 📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!
  • 📢本文作者:由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:ErrorsOnly

if ($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后,这个用途越来越少了。

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

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

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

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

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

相关文章

无法登录github解决方法

140.82.113.4 github.com 199.232.69.194 github.global.ssl.fastly.net 185.199.108.153 assets-cdn.github.com 185.199.109.153 assets-cdn.github.com 185.199.110.153 assets-cdn.github.com 185.199.111.153 assets-cdn.github.com 注意以管理员方式运行notepad才能保存 …

Github上标星40K的Java面试笔记,解决95%以上的Java面试

该文档在Github上收获40Kstar的Java面试神技&#xff08;这赞数&#xff0c;质量多高就不用我多说了吧&#xff09;非常全面&#xff0c;包涵Java基础、Java集合、JavaWeb、Java异常、OOP、IO与NIO、反射、注解、多线程、JVM、MySQL、MongoDB、Spring全家桶、计算机网络、分布式…

集成学习(ensemble learning)应如何入门?

集成学习算法之间的主要区别在于以下3个方面: 提供给个体学习器的训练数据不同; 产生个体学习器的过程不同; 学习结果的组合方式不同&#xff0c;从这三个方面去学。 多样性 数据样本多样性&#xff1a;产生数据多样性的方法主要有3种: 输入样本扰动; 输入属性扰动; 输出表示…

掌握Python的常用模块pandas

Pandas 简介 Pandas 是 Python 的核心数据分析支持库&#xff0c;提供了快速、灵活、明确的数据结构&#xff0c;旨在简单、直观地处理关系型、标记型数据。Pandas 的目标是成为 Python 数据分析实践与实战的必备高级工具&#xff0c;其长远目标是成为最强大、最灵活、可以支持…

10 编码转换问题

文章目录 字符编码问题编码转换问题ANSI转UnicodeUnicode转ANSIUtf8转 ANSIutf8 转UnicodeANSI 转UTF-8Unicode 转 UTF-8 全部代码 字符编码问题 Windows API 函数 MessageBoxA:MessageBox 内部实现&#xff0c;字符串编码(ANSI)转换成了Unicode,在调用MessageboxW MessageBox:…

助推RASP2.0 领航ADR新赛道 边界无限打造应用安全防护新范式

2023年以来&#xff0c;数字安全一词多次被提及&#xff0c;成为了我们生活和工作中的一项重要课题。近日&#xff0c;由数世咨询、CIO时代联合主办&#xff0c;新基建创新研究院作为智库支持的“第三届数字安全大会”在北京隆重举办&#xff0c;本届大会以“风险驱动”为主题&…

第26章 uView 内置路由使用注意事项

1 uView 内置路由不支持通过“localhost”域名直接获取数据。 在前后分离开发中“axios” 路由支持使用“localhost”域名或IP地址获取后端的数据&#xff0c;所以不管是IIS部署还是后端调试通过“axios” 路由都能获取数据&#xff0c;对于.NetCore的前后端分离开发来说“axio…

python爬虫之Scrapy框架--保存图片(详解)

目录 Scrapy 使用ImagePipeline 保存图片 使用图片管道 具体步骤 安装相关的依赖库 创建Scrapy项目 配置settings.py 定义Item 编写Spider 运行Spider Scrapy 自定义ImagePipeline 自定义图片管道 Scrapy 使用ImagePipeline 保存图片 Scrapy提供了一个 ImagePipelin…

使用原生AJAX请求数据

一、什么是AJAX AJAX英文全称 Asynchronous Javascript And XML&#xff08;异步的JavaScript和XML&#xff09;&#xff0c;是指一种创建交互式网页应用的网页开发技术&#xff0c;用于浏览器和服务器之间进行数据交互。AJAX在浏览器与Web服务器之间使用异步数据传输&#xf…

【Jetpack】Navigation 导航组件 ③ ( 为 Navigation Graph 页面跳转 action 添加跳转动画 )

文章目录 一、为 Navigation Graph 添加跳转动画1、进入 Navigation Graph 配置的 Design 模式2、选中 action 跳转3、为 action 跳转设置 enterAnim 进入动画4、为 action 跳转设置 exitAnim 退出动画5、通过代码为 action 跳转设置进入 / 退出动画6、执行效果 代码地址 : CS…

DBeaver连接mysql时报错com.mysql.cj.jdbc.Driver的解决方法【修改驱动下载的maven地址和重新下载驱动】

文章目录 说明解决方法1、打开DBeaver点击窗口-->窗口-->首选项-->链接-->点击驱动-->Maven-->添加2、删除已有的驱动3、重新创建mysql链接 说明 网上下载了最新版本的DBeaver软件&#xff0c;但是链接mysql的时候驱动下载失败&#xff0c;所以就报下面错误…

Cisco Secure Client 5.0.03072 (macOS, Linux, Windows iOS, Andrord)

Cisco Secure Client 5.0.03072 (macOS, Linux, Windows & iOS, Andrord) 思科安全客户端&#xff08;包括 AnyConnect&#xff09; 请访问原文链接&#xff1a;https://sysin.org/blog/cisco-secure-client-5/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出…

半小时摸清一个行业:ChatGPT+麦肯锡关键词法

大家好&#xff0c;我是可夫小子&#xff0c;关注AIGC、读书和自媒体。 说实话&#xff0c;在行业分析中「关键词分析法」最早见诸于冯唐&#xff0c;并非是麦肯锡公司的方法论。 冯唐作为麦肯锡前合伙人&#xff0c;讲了快速掌握一个行业的基本方法&#xff0c;一共有三个看似…

ChatGPT最新版多功能批量写作工具揭秘

随着人工智能技术的不断进步&#xff0c;自然语言处理领域也取得了巨大的突破。其中&#xff0c;ChatGPT作为一款强大的多功能批量写作工具&#xff0c;备受关注。它的最新版本将用户体验提升到了一个新的高度。本文将从多个方面详细阐述ChatGPT最新版的功能和优势。 自动摘要功…

进程与线程的区别,特点比较区别与联系

进程与线程的区别、关系 定义关系比较对于系统调度来说&#xff1a;从拥有资源来说&#xff1a;并发性上下文&#xff1a;系统开销使用多线程的主要目的&#xff1a; 定义 进程&#xff1a;进程是程序执行的实例&#xff0c;包括程序计数器和寄存器和变量的当前值 进程依赖于程…

漏洞复现-fastjson1.2.24-RCE

0x00 实验环境 攻击机&#xff1a;Win 10、Win Server2012 R2&#xff08;公网环境&#xff0c;恶意java文件所在服务器&#xff09; 靶机也可作为攻击机&#xff1a;Ubuntu18 &#xff08;公网环境&#xff0c;docker搭建的vulhub靶场&#xff09;&#xff08;兼顾反弹shell…

创造与布局:剖析 Java 对象创建过程以及内存布局

目录 前言创建对象过程对象布局普通对象数组对象如何观察 Object 大小对象头组成部分 对象如何定位对象如何分配总结 前言 上下文提及到了类的加载过程&#xff0c;详细介绍了加载类的每个阶段&#xff1a;Loading、Linking、Initialize&#xff0c;在其中也说明了静态变量赋…

【无标题】asdasd

【4】Ubuntu网络图标消失 sudo service network-manager stop ----->停止网络服务 sudo rm /var/lib/NetworkManager/NetworkManager.state ----->删除配置文件 sudo service network-manager start ----->重启网络服务 sudo vim /etc/NetworkManager/NetworkMana…

Linux RPM包安装、卸载和升级(rpm命令)详解

下面讲解一下&#xff0c;如何使用 rpm 命令对 RPM 二进制包进行安装、卸载和升级操作。我们以安装 apache 程序为例。 RPM包默认安装路径 通常情况下&#xff0c;RPM 包采用系统默认的安装路径&#xff0c;所有安装文件会按照类别分散安装到下表所示的目录中。 RPM 包默认安…

Mybatis实现品牌数据的增删改查

项目目录如下图所示。Mapper包用于存储对数据库进行操作的Mapper接口文件&#xff0c;本文中通过注释的方式对sql语句进行编写。pojo包中存放实体类文件&#xff0c;文件中包含Brand对象相关字段的定义以及get、set、toString方法。service包中存放service层文件&#xff0c;调…