在很久之前net还只能在windows上部署的时候,或许很多创业公司的朋友发布项目还都是人肉部署,反正windows都是可视化的界面,拖拖拉拉,开开关关还不

是特别麻烦。。。现如今你的项目需要在linux上部署,可惜的是再也没有什么可视化的界面给你,全在xshell上操作,如果在xshell上部署个位数的项目大家或许还可

以接受,如果要部署10+以上的服务呢,估计很多人在xshell上敲的头都大了。。。这就是为什么docker会有dockerfile,会有容器编排的docker-compose,所以找

一款自动化发布工具迫在眉睫了。

一: Jenkins部署

  它的官方网址是:https://jenkins.io/download/  ,使用docker模式部署的话太简单了,本篇就不用Docker部署,而是直接部署到宿主机Centos上,如下图:

1. 导入jenkins的key

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.reposudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

2. 使用yum安装

yum install jenkins

3. 启动jenkins

[root@localhost ~]# service jenkins startStarting jenkins (via systemctl):                          [  OK  ]

4. 然后在浏览器中输入你的虚拟机IP:  http://192.168.23.173:8080,看到下面的界面就算成功了。

  

  然后大家就可以按照步骤一步一步下去就可以了。

二:构建你的netcore程序

  先提供一个简单的test程序,供后续做自动化部署只用。

  static void Main(string[] args){            var bgtask = Task.Run(() =>{                for (int i = 0; i < 1000; i++){Log.Info($"i={i}");Thread.Sleep(1000);}});AppDomain.CurrentDomain.ProcessExit += (s, e) =>{Log.Info($"{DateTime.Now} 恭喜,TestService服务程序已准备退出!");Environment.Exit(0);};bgtask.Wait();}

三:jenkins配置

1.  点击新建任务

2. 选择构建一个自由风格的软件项目,然后点击确定

3.   这里的“源码管理”tab页是非常重要的,默认支持git和svn,这里就选择svn了,把你生成svn的地址贴上去,因为后续

执行shell脚本的时候,会在jenkins的workspace文件夹中执行dotnet publish 的。

4. 在“构建” tab页中,最最重要的就是里面的shell脚本。

ps -ef | grep MemSql.Test.dll | grep -v grep | awk '{print $2}' | xargs --no-run-if-empty killcd ./MemSql.Testmkdir -p /data/output/MemSql.Test/v${BUILD_NUMBER}
dotnet publish -o /data/output/MemSql.Test/v${BUILD_NUMBER} -c Release
cd /data/output/MemSql.Test/v${BUILD_NUMBER}
BUILD_ID=dontKillMe nohup dotnet MemSql.Test.dll &

这里要关心的几处是:

《1》 在kill pid的时候,如果pid不存在,你的默认脚本会报pid不存在的错误的,所以加上 --no-run-if-empty  的if判断,没有就

不执行kill。

《2》 使用了一个Jenkins的一个环境变量 {BUILD_NUMBER} , 也就是下图中的这个位置,用这个编译版本号作为文件夹。

《3》 因为我是用nohup生成后台进程的,所以要使用dotKillMe命令让jenkins不要在生成完后kill 它。

然后点击保存,这个Test项目的自动化部署就搞定了。。。

四:操作流程

在操作之前,一定要记得让 jenkins用户提升一下权限,否则你的 copy,mkdir可能权限不足,这里我就提升成root权限。

1: 把jenkins用户加入到root组中。

gpasswd -a root jenkins

2:修改/etc/sysconfig/jenkins文件, 把原来的 users= jenkins 改成root。

# Unix user account that runs the Jenkins daemon
# Be careful when you change this, as you need to update
# permissions of $JENKINS_HOME and /var/log/jenkins.
#
JENKINS_USER="root"JENKINS_GROUP="root"

3:重启Jenkins即可

service Jenkins restart

4. 然后你的步骤为:

《1》 在svn中提交代码。

《2》 找到你的所属项目,点击“立即构建”。

当然也可以让jenkins自动化构建,但是考虑到生成项目,最好还是加上手工发布这个按钮,安全可靠, 构建完之后,大家可以看看 jenkins的 “控制台输出”。

然后你可以通过ftp去生产看一下,果然都跑起来了,v21就是我的编译版本号,而且你的日志果然就是我的业务逻辑输出,对吧,如下图:

这时候,你觉得代码有问题,需要修改一下,把i 改成 m ,接下来的步骤也就是 “提交代码” -> “可视化立即编译”  ->  "查看结果" 这样的流水线作业而已啦。。。。

好了,本篇就说到这里,希望对你有帮助。

原文链接:https://www.cnblogs.com/huangxincheng/p/9608410.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

netcore编程之后面对不习惯的xshell黑屏部署,是时候使用jenkins自动化发布工具了...相关推荐

  1. 这5个PHP编程中的不良习惯,一定要改掉!

    在项目的每一次提交之后,我都会进行大量代码审查,会经常看到一些重复出现的错误.以下这五个错误应该要及时纠正,这是纠正它们的方法. 这5个PHP编程中的不良习惯,一定要改掉 PHP世界上最好的语言! 测 ...

  2. 76. Lotus Notes编程中的命名习惯

    程序里实体的命名规则和习惯 在一种开发环境里编程,会用到各种实体(开发中用到的从文件类型.程序的组织单元到数据库对象的种种对象,不用对象一词以与面向对象语言里的对象区分).实体种类的多少,与所用语言和 ...

  3. 全国计算机vb考试编程,计算机等级考试VB编程8个优良习惯

    导语:当我拿到计算机等级考试证书的时候,真的很激动.下面就由小编为大家带来计算机等级考试VB编程8个优良习惯,希望对大家有所帮助! 1."&"替换"+" ...

  4. .netcore下的微服务、容器、运维、自动化发布

    微服务 1.1     基本概念 1.1.1       什么是微服务? 微服务架构是SOA思想某一种具体实现.是一种将单应用程序作为一套小型服务开发的方法,每种应用程序都在其自己的进程中运行,并采用 ...

  5. netcore使用 jenkins + supervisor 实现standalone下多副本自动化发布

    前面的文章聊过用 jenkins 做了一个简单的自动化发布,在shell中采用的是 BUILD_ID=dontKillMe nohup dotnet xxx.dll &  这种简单的后台承载, ...

  6. 基于TCP,Socket编程,模仿腾讯QQ界面,使用Java开发的一款网络聊天工具。QQ_Chat

    代码下载地址 原博客地址 QQ_Chat 基于TCP,Socket编程,模仿腾讯QQ界面,使用Java开发的一款网络聊天工具. (内含报告) 工具: Eclipse.Navicat for MySQL ...

  7. 建议转变编程时的思维习惯改为:忽略细节关扰,直指问题核心,追寻问题关键。...

    建议转变编程习惯改为:忽略细节关扰,直指问题核心,追寻问题关键. 不要再沉溺于细节的理解,现在还不是时候.

  8. 学习编程,这些好习惯带我们平步青云——直通大牛

    1.动手编码之前,你需要对要编码实现的解决方案有- -个正式的或粗略的设计.永远不要在没有任何设计的前提下就开始编码,除非所编代码不重要. 2.优秀的代码文档跟编程语言知识一样重要.在代码源文件中,为 ...

  9. ASP.NETCore编程实现基本认证

    HTTP基本认证 在HTTP中,HTTP基本认证(Basic Authentication)是一种允许浏览器或其他客户端程序使用(用户名,口令)请求资源的身份验证方式,不要求cookie,sessio ...

最新文章

  1. ThreadLocal的使用场景
  2. 清北学堂模拟赛d5t4 套路
  3. 数据中心空调故障案例集
  4. lsof查看进程占用文件_lsof命令查看进程socket相关信息
  5. 【建议收藏】数据中心服务器基础知识大全
  6. sublime 如何使用less_Sublime Text3 使用教程
  7. CSS效果:固定页脚、PNG透明、最小高度 3枚
  8. 评分卡模型开发(八)--主标尺设计及模型验证
  9. Pr常见问题,如何找回不小心删除的视频音频
  10. 微信支付中证书的存放目录及其路径写法
  11. 使用Aria2+AriaNG+FileManager来进行离线BT下载及在线播放
  12. C++ 编写一个解释器
  13. 阿里云建站套餐怎么样?具体建站流程
  14. 软考高项学习教程【第二阶段】:第7章-项目人力资源管理
  15. 【Simapro软件教程】参数进行灵敏度分析
  16. HYBBS2.3轻论坛M-TOUCH模板源码
  17. cad墙线打断lisp_CAD绘制墙体时,不打断模式有什么好处?
  18. 参数非法异常:java.lang.IllegalArgumentException: class com.xxx.SignDetailRQ declares multiple JSON fields
  19. 大学生体质测试管理系统
  20. 批量删除的三种实现方式

热门文章

  1. 自动判断PC端、手机端跳往不同的域名JS实现代码
  2. 我为什么卸载了今日头条
  3. List 集合转换为String
  4. Shell配置_配置IP
  5. MFC和Win32之三___CGdiObject类和windows Gdi对象
  6. 充分利用系统的组策略 保障共享目录安全
  7. 诺基亚首款Windows Phone智能手机将在年内推出
  8. WebCast学习链接
  9. 记一次 .NET 某新能源汽车锂电池检测程序 UI挂死分析
  10. WPF 如何实现颜色值拾取