设为首页 收藏本站
查看: 1101|回复: 0

[经验分享] jenkins 持续部署 .net 服务

[复制链接]

尚未签到

发表于 2018-1-8 20:00:30 | 显示全部楼层 |阅读模式
  非真实项目,就是熟悉使用jenkins

一、要做什么
  入门教程,所以啰嗦点,基础点。
  
DSC0000.png
  
如上图:
  
有一台公网的linux服务器,一台家里的pc(develop1)和一台家里的笔记本电脑(develop2)。还有工程是存储在开源中国上。
  
要实现的功能就是:


  • 通过jenkins启动一个job,这个job会被分配到从机slave(develop1)上
  • 然后develop1会从git上下载项目,并且使用msbuild编译项目,利用winrar打包项目
  • 将上一步打包好的项目发送到develp2上
  • 在develop2上解压项目,调用脚本进行部署服务
二、把jenkins跑起来
  这里使用docker来部署jenkins,docker最厉害的地方就是部署方便,当然jenkins在windows上的部署也很方便容易,主要就是为了学习docker。.Net程序的编译最好还是在开发机上,因为开发机上的编译环境最全,基本上装了vs就都有了。如果想单独弄一台服务器专门用于编译.Net项目,并且不想装vs,那可能要费点功夫在编译环境的搭建上了。使用jenkins有一个重要的思想就是jenkins扮演的是调度者的身份,把一些零碎的工作串联起来。 当初第一次把jenkins跑起来,我居然天真的以为可以用jenkins编译.Net项目,因为jenkins上会装一个MSBuild的插件。然而并不是这样滴,因为jenkins仅仅是一个调度者的身份,具体干事的还是这些从机,或者本机的一些编译命令。
  在Ubuntu上安装Docker照着教程弄,还是很容易。
  下载jenkins镜像,并且在Docker上运行起来,这里怎么下载怎么用都有详细说明,仔细看看
  访问jenkins页面,设置一个账户,一些基本的插件安装,之后就能看到这个页面了
  
DSC0001.png

三、配置节点(从机)
  先配置开发机,也是编译用的机器develop1。


  • 看到jenkins左边的菜单项:系统管理->管理节点->新建节点
  • 输入一个节点名称,选中Permanent Agent,点击ok进入节点的详细配置页面
DSC0002.png

  远程工作目录:就是从机的一个文件夹,这里要写绝对路径,我的就配置成:E:\jenkins_node
  标签:相当于一个分组,多个从机可以分配到同一个标签下,我们这里用得少,就一个从机一个标签了,配置成node1
  用法:因为只有这台机子可以编译.Net项目,所以配置成只允许运行绑定到这台机器的job
  启动方法:这个后面有个帮助文档,点开可以看一下,选Launch agent via Java Web Start,这个的话就是要在从机上运行一个java的文件,这个东西就是一个代理,他会和jenkins服务器建立一条TCP通道,各种命令的传输,文件的拷贝就是通过这个代理和服务器建立的通道完成的。
  Availability:选择keep this agent online as much as possible
  然后保存,看到节点列表如下:
  
DSC0003.png
  
点击develop1,看到如下:
  
DSC0004.png
  点击Launch这个按钮,会下载一个文件下来,slave-agent.jnlp,这个东西需要从机安装Java才能运行。安装好java之后,双击这个文件,就能运行起来,但是在网页节点列表上还是显示链接失败。这个时候看上图,还有一个方法Run from agent command line:,下面有个slave.jar包,下载下来,运行整个java命令,注意路径问题。之后就会显示连接上了。再用刚才我们的那个slave-agent.jnlp文件运行,发现也能链接上了。这个时候去看一下E:\jenkins_node,发现里面已经多了一些东西了。一个从机节点的配置就是如此,另外一台用于部署的机器也是如此,这里就略过了。

三、工程:一个毫无用处的服务
  这里就是为了演示服务的部署,所以具体做什么不重要。但有个东西很好用,需要说一下,就是这个Topshelf。这个东西最厉害的地方就是能很容易地把一个控制台应用程序包装成服务运行起来,调试的时候使用控制台输出观察,具体要部署的时候,只需要在控制台应用程序.exe后加参数,就能运行为服务。可以看下教程,很简短,因为使用很简单。所以这里直接贴代码了。
  DoServie.cs
  

public>
{  public void Start()
  {
  

  }
  

  public void Stop()
  {
  

  }
  
}
  

  Program.cs
  

class Program  
{
  static void Main(string[] args)
  {
  HostFactory.Run(config =>
  {
  config.Service<DoService>((setting) =>
  {
  setting.ConstructUsing(x => new DoService());
  

  setting.WhenStarted(x => x.Start());
  

  setting.WhenStopped(x => x.Stop());
  

  });
  

  config.StartAutomatically();
  

  config.EnableServiceRecovery(recoveryConfig =>
  {
  recoveryConfig.RestartService(0);
  });
  

  config.SetDescription(&quot;test Jenkins&quot;);
  config.SetDisplayName(&quot;testJenkins&quot;);
  config.SetServiceName(&quot;testJenkins&quot;);
  });
  }
  
}
  

  安装服务的脚本install.bat,先卸载以前的服务,再安装服务,再启动,这个%~dp0就是dos下的一些变量吧,意思是bat文件所在路径
  

%~dp0DoNothingService.exe uninstall  
%~dp0DoNothingService.exe install
  
%~dp0DoNothingService.exe start
  

  卸载服务的脚本uninstall.bat
  

%~dp0DoNothingService.exe uninstall  

  好,把这个东西上传到开源中国上。

四、在jenkins上配置一个编译.Net项目的job
  回到主界面
  
菜单列表:新建,如下:
  
DSC0005.png
  
选择第一项,构建一个自由风格的软件项目,ok确定,进入到详细配置页面
  
这个页面先用到基本的3个模块==Genera,源码管理,构建==
  General
  
DSC0006.png
  
基本信息里要注意红框中的部分,它的意思就是指定这个Job在哪个节点上运行,还记得我们上面创建的从机node1么,这里就是指定这个Job会交到node1上来执行。
  源码管理
  
DSC0007.png
  
我这个项目是公开的,所以不需要身份验证信息,如果你的是私有项目,把账号密码填写一下就可以了。再有一个就是注意分支。源码管理就配置完了。
  构建
  
再说构建之前,需要安装一个插件。先保存一下这个工程的配置。然后回到主菜单:系统管理->管理插件->可选插件,找到MSBuild Plugin,安装,稍等片刻,回到刚才工程的配置。
  
DSC0008.png
  
在构建下选择Build a Visual Studio project or solution using MSBuild,填写Command Line Arguments就行了,这里要注意一个路径问题,解决方案文件所在的路径,这里可以保存后,在项目页面点击立即构建,在里面看输出日志,哪里不对,慢慢调试。此时,node1下的路径为*E:\jenkins_node\workspace\NetServer*,这个节点代理从开源中国上把项目下载到了工作目录下,所以,编译参数的路径是以NetServer开始的。试几次之后,基本就能编译通过了。
  注意: 从机需要安装git。
  编译成功之后,我们得到了一堆.exe和dll,显然不利于传输,我们就用WinRar打个包,开发机要装winrar哦,并且添加到系统路径中。打包肯定是在编译成功之后执行的步骤,所以我们再增加一个构建步骤,并选择Execute Windows batch command,把我们的打包命令添加到当中
  
DSC0009.png
  
进入到输出文件目录,把Release文件夹打包为release.rar,注意-ibck参数是让winrar在后台运行。
  
至此我们在一台从机上编译了项目,并且把程序打了包。那么,我们如何从一台从机上把打包的东西运输到另一台从机上呢?

五、Copy Artifact Plugin
  Copy Artifact Plugin,这是一个jenkins插件,安装它,就跟我们刚才安装MSBuild Plugin一样。
  
它的使用回到我们刚才NetServer这个项目里,在构建后操作中有个选项,Archive the artifacts,选择它。
  
DSC00010.png
  
存档的文件可以用通配符,注意路径问题。配置好这个之后,我们在立即构建一次。可以看到项目页面多了一行输出。
  
DSC00011.png
  
这样我们从机(node1)的工作就完成了。

六、把release.rar下载到部署机(node2)上,解压并运行
  这一步需要一个新的工程,基于NetServer的输出来完成。创建一个新的工程,还是选择自由风格。
  
DSC00012.png
  还是注意红框处,现在是配置成了node2,意思就是这个任务会交到node2部署机上执行
  
下面就是很重要的一个配置了
  
DSC00013.png
  就是这个项目怎么触发的,NetServer我们是手动触发,所以没有配置任何东西,NetServer_publish的话,需要NetServer构建成功后自动执行,所以需要如上配置触发器。继续下面的配置,构建步骤也很重要
  
DSC00014.png
  Project name: 要从哪个项目Copy东西,依赖的上级项目
  
Artifacts to Copy: 这个要配置绝对路径,可以从前一个工程那里copy绝对路径过来
  
Target directory 和 Flatten directories: 这两个主要是用于自定路径的,不然会按照NetServer的目录结构完全一套搬过来,没必要,所以就这么设置,就只会在node2的工作目录下创建一个Build文件夹,里面就是release.rar文件。
  立即构建一下试试,发现在部署机上是不是已经有了release.rar 包了。下面就是解压和运行了,我们不是可以执行dos命令么。继续添加构建,命令如下
DSC00015.png



  • 进入到Build文件夹
  • 先停止以前的服务,如果没有,那么这个命令失效,继续下面的命令
  • 解压,覆盖,后台运行
  • 进入Release文件夹
  • 再停止一遍服务
  • 启动服务
  立即构建一下,看输出日志调试,最终调通。
  
好,从头跑一遍,来到项目列表,立即构建项目NetServer,发现其执行完之后,立即开始了NetServer_Publish项目,观察部署机上的服务,卸载了又重新运行了。
  这篇也就是学习路上的一个记录,主要自己想做的这个东西没有很全面的一个教程,都是每个插件怎么用,很零散,这次组合起来给后面来的同学一个小例子吧,也有很多不清楚的地方,错误的地方请各位大神指出。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-433030-1-1.html 上篇帖子: Jenkins .net windows 下篇帖子: Jenkins集成方案
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表