.Net 使用Jenkins 初步实现CI/CD

 一、引言

    最近在研究CI/CD,正好公司也准备使用CI/CD,就花了半天的时间学习了一些jenkins,网上的资料很多,大部分都是java方向的,其他方向的资料相对较少,写一篇博客记录一下,也可以帮助自己加深印象,也能为初学的同学提供一些思路。

二、jenkins是什么?

    Jenkins是一个开源的、可扩展的持续集成、交付、部署(软件/代码的编译、打包、部署)的基于web界面的平台。允许持续集成和持续交付项目,无论用的是什么平台,可以处理任何类型的构建或持续集成。   

  官网:https://www.jenkins.io/  官方文档:https://www.jenkins.io/doc/  下载地址:https://www.jenkins.io/download/   

    Jenkins特性:     

          开源的java语言开发持续集成工具,支持CI,CD;     

          易于安装部署配置:可通过yum安装,或下载war包以及通过docker容器等快速实现安装部署,可方便web界面配置管理;     

          消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知,生成JUnit/TestNG测试报告;     

          分布式构建:支持Jenkins能够让多台计算机一起构建/测试;     

          文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等;     

          丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如git,svn,maven,docker等。

三、环境准备

    我是在windows下使用jenkins的,现在的电脑配置几乎都可以支持jenkins的,除非你的电脑配置特别低。因为Jenkins是基于Java平台的,所以你需要安装java的jdk,安装1.8及以上都可以。

    在官网上可以下载长支持版本(LTS),LTS版本是2.235.1,我现在也是使用的这个版本,下载下来的文件是jenkins.msi,安装就行了,默认端口是8080,可以自行修改端口号,修改端口号后记得去jenkins配置去同步你的更改,如下图

 

 

    当你第一次打开jenkins的web界面时,会让你输入管理员密码(默认用户是admin),用来解锁Jenkins,初始化的密码放在 %JENKINS_HOME%\secrets\initialAdminPassword 中,如果你的安装路径是D://jenkins,那么路径就是D:\jenkins\secrets\initialAdminPassword中,这个界面也会有提示。在你真正进入jenkins之前,你还需要选择安装插件,一般情况下都选择安装推荐的插件,如下图所示:

 

 

 

      静静的等待插件安装完毕,有安装失败的也别太担心,因为插件你不一定都能用到,一般不影响使用。插件安装完成后,会让你创建一个管理员账户,你也可以在右下角选择继续使用admin账户,自己考虑。下一步是配置Jenkins URL,这个是必须要配置正确的,默认端口号是8080,一般这里都是默认填好的,如果端口号需要修改的话,自行配置。如下图:

 

 

 

 

    这几个步骤完成之后就可以使用jenkins了。

四、Jenkins的插件安装及配置

     .Net的编译是用MSBuild来完成的,发布一般是发布到FTP上,代码管理一般是Git 或者 是SVN(我用的svn),所以这里需要安装3个插件,MSBuild-plugin、Publish Over FTP、Subversion(针对svn)。

             安装MSBuild之后,需要配置msbuild.exe的地址,我直接用的是vs 2019 自带的msbuild,在服务器上可以安装msbuild-tools,用来编译。

         

 

 

 

        安装Publish Over FTP后需要配置FTP的配置,我现在使用的本地的FTP地址,我是直接上传到FTP的根目录下,在Remote Directory 可以设置远程目录。FTP Server可以配置多个,在task中可以选择。

        

 

 

     Subversion这个设置是在配置task的时候配置的,暂时不需要全局配置。

五、配置一个自定义构建项目

  1.      点击左侧菜单:新建Item,弹出这个界面,这里有几个类型可以选择:
    1. Freestyle project:这个是jenkins的基础功能,可以用它来执行各种构建任务,它只能构建在一个电脑上,如果没有太多的需求,这个job基本够用了,它包含了所有基础功能。 
    2. Pipeline:真实的工作环境有很多job,比如先编译,然后执行静态代码检查、单元测试、然后部署服务器、服务器重启、进行ui测试等。我们需要对这些job进行一些设置将它们的上下游关系配置好。这个时候就需要pipeline配置了。   
    3. External job:用来监视外部执行的job.。
    4. Multi-configuration project:可以让job跑在不同的机器上,这个需要添加机器(节点)。
  2. 输入一个任务名称,名称是唯一的,不能重复。选择Freestyle project,自定义格式项目,点击确定后,进入一下个界面
  3. 这个界面主要设置如何构建项目,并且构建之后需要做什么操作,第一部分是基础设置,主要是设置一些策略,discard old builds 看配置项就能明白,是针对历史构建记录的操作。包括保留构建的天数和最多保留构建个数。
  4. 第二部分是源码管理,在这里需要设置代码管理相关的配置,装了插件之后,会有git,subversion,svn对应的是subversion,在这里可以填写svn的地址(svn的url后可以加一个@HEAD,这样可以保证每次构建的时候是最新的代码,也支持@后面加上版本号,这样可以构建指定的版本),账号密码,local module directory(这里是相对路径,相对于jenkins的 workspace\jobname,项目的源码会下载到这个目录下),账号密码是要点击添加,选择jenkins会弹出凭据添加框,domain默认只有全局,类型看代码服务器配置,我这里用的username和password,输入对应的账号和密码就可以了。点击添加后,会自动验证是否有权限和正确。                                                            
  5. 在构建触发器这一项中,一般选择Poll SCM,输入类似cron表达式,
    1. Trigger builds remotely (e.g. from scripts):外部通过url命令触发,拼接token和url就可以进行远程触发了。

    2. Build after other projects are built:监控其他job的构建状态,触发此job。如监听代码提交,然后触发UITest,静态分析等。
    3. Build periodically:定时触发。选择 Build periodically,在 Schedule 中填写 0 * * * 。第一个参数代表的是分钟 minute,取值 0~59;第二个参数代表的是小时 hour,取值 0~23;第三个参数代表的是天 day,取值 1~31;第四个参数代表的是月 month,取值 1~12;最后一个参数代表的是星期 week,取值 0~7,0 和 7 都是表示星期天。所以 0 * * * 表示的就是每个小时的第 0 分钟执行一次构建。举个例子:每周六10点构建 0 10 * * 6,0-0分钟,10-10点 -任意天 -任务月份 6-周六,0可以改为H。

    4. Poll SCM:定时感知代码分支是否有变化,如果有变化的话,执行一次构建。示例:H/5 * * * * 每五分钟去检查一下远程仓库,看代码是否发生变化。

    5. GitHub hook trigger for GITScm polling:hookplugin检测到源码的push操作触发构建,感觉Poll SCM更方便些,如果提交频繁,则这个触发就会频繁,看业务需要设置。
  6. 下一步是设置构建环境:
    1. Delete workspace before build starts:默认删除所有的,也可以设置删除特定的文件。
      - Patterns for files to be deleted:正则匹配删除哪些文件。
      - Apply pattern also on directories:规则是否也应用到文件夹。
      - Check parameter:是否删除,是个bool值,true则删除,false不删除,不知道啥用。。。
      - External Deletion Command:执行外部删除命令。
    2. Abort the build if it’s stuck:构建阻塞的时候,根据超时策略处理。
      - Time-out strategy:超时策略,有绝对时间,相对时间,根据以前的构建时间判断等。
      - Time-out variable:超时时间。
      - Time-out actions:超时后的处理,如终结,faile调或者写描述。
    3. Add timestamps to the Console Output:在输出界面添加时间戳。
    4. Use secret text(s) or file:使用密文,用于全局性的管理密码等,勾选后会在下方出现Binding,输入需要的用户名,密码证书等就可以了。
  7. 构建,这个步骤选择Build a Visual Studio project or solution using MSBuild,这一步是设置如何构建和编译你的项目,
    1. 这里配置按界面的顺序去执行的,所以首先你要还原你的nuget包,拷贝一个nuget.exe放到任意jenkins能访问的文件夹或远程地址,然后拷贝下面命令,第一条默认的nuget地址是微软的包源,后面可以加source参数,指向自己的nuget包源。

      D:\work\NugetTool\nuget.exe restore .\Test.sln
      D:\work\NugetTool\nuget.exe restore .\Test.sln -source http://negut.mynuget.com/nuget

    2. 在msbuild中,msbuild version 可以选择default和自定义的,默认的msbuild版本有点低,编译代码可能会出错,一般选择自定义的。
      1. /t:Build :build是生成,如果没有更新,则不会重新生成,ReBuild是每次都会重新生成。
      2. /p:DeployOnBuild=true:构建且编译,可以为false。
      3. /p:PublishProfile=Test.pubxml:这个是发布的配置文件,一般用来web发布。这个在需要发布的Web项目路径\Properties\PublishProfiles下。
      4. /p:WebProjectOutputDir=d:\Mytest,这个是设置web项目发布的路径,可以不设置,因为在第三项已经有发布路径了。
      5. /p:OutputPath=d:\Mytest\bin,这个是bin文件夹发布的路径。
      6. /p:Configuration=Release,使用release的配置。
  8. 当构建完成的时候,我们可以设置构建后操作,比如发布到FTP服务器上,FTP Server 需要选择自己设置的ftp服务器,支持多个ftp server,自行add server 。
    1. source files:相对于workspace的路径,**/test001/**,这个表示传输test001这个文件夹下所有的文件。
    2. remote directory:设置远程目录,不设置就是根目录。
    3. Exclude files:忽略项,
      1. **\Config\** :忽略Config文件夹下所有文件。
      2. **\*.config:忽略test001下的 .config 文件。

 

 

 

 六、结束

      以上就是完成了一个项目的发布,这个是最简单的一个CI/CD流程,单项目可以用了。里面还有很多配置还未彻底弄清楚,还需要一些时间去完善。欢迎各位大佬一起交流。

 

 

 

 

 

 

 

    

    

   

 

posted @ 2020-06-29 15:43  祁临芯  阅读(913)  评论(0编辑  收藏  举报
友情链接:初心商城