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

[经验分享] Jenkins使用教程(中)

[复制链接]

尚未签到

发表于 2018-9-4 09:26:27 | 显示全部楼层 |阅读模式
jenkins 入门教程(中)
  接上回继续,本文以我托管在bitbucket上的一个开源项目spring-boot-rest-framework做为演示,讲解如何创建自动化部署。
  一、创建item

  点击ok继续,item的详情页面很长,我们分成一段段来讲解,最上面这部分,除了名字要填写外,其它全留空即可

  然后是源代码管理部分,这是一个git项目,先在Repository URL这里填写上项目的git地址(即:红字1的位置),bitbucket是需要用户名密码才能访问的,所以Credentials这里要选择相应的用户名、密码(即:红字2的部分),红字3的部分为git获取的源代码分支名称,一般为master主分支,也可以改成自己希望的分支。

  可能有同学会问,红字1处的git地址怎么得到? 这个很简单,bitbucket网站项目右上角里就有,见下图:

  另外,红字2处对应的下拉框,首次进来时,应该是空的,可点击右侧的Add,添加用户名,密码,见下图:

  然后在Build的部分,点击Add Build Step下拉框

  本文中的这个项目是maven项目,所以我们选择Invoke Maven3

  然后输入maven构建必要的参数,参考下图:

  然后保存,创建完成。
  二、开始构建
  保存后,系统会返回首页,每个项目旁边有一个小三角箭头,选择Build Now

  稍等片刻,左侧就会出现一个进度条,表示正在Building...

  点击这个进度条上的链接,会看到构建详情

  继续点击进度条前的#x的序号,会看到左侧有一个Console Output

  点击output,可以实时看到构建过程中的所有输出,内容大致如下:
  + View Code
  从输出内容可以看出构建的整个过程:先从git上拉取源码,然后调用maven命令进行构建。只不过这一切是在UI界面完成的,以后项目的Build工作就可以交由运维甚至测试人员直接来做了,程序员只管提交代码即可。
  三、远程分发
  编译成功只是第一步,接下来要将编译后的文件打包上传到远程服务器,通常在上传前会压缩一下,即节省带宽,也方便传输。

  参考刚才添加maven参数的做法,再次点击Add build step,只不过这次选择Execute shell,即执行脚本,脚本内容如下:

  即:进入工作目录下的target目录,然后将编译后的jar包压缩成.tar.gz包,大家可以参考图中的命令自行调整。
  接下来要上传到远程服务器,理论上讲,应该继续在上面的脚本里追加一行scp deploy.tar.gz user@remote_server:/remote_path之类的命令,大家可以尝试一下,最后执行时多半会报没有权限,原因是jenkins当前运行的账号通常不是root账号,权限不够。更好的做法是利用scp插件,以证书方式连接到远程服务器(具体配置请参考上节SSH相关的部分),参考下图:

  在post-build actions下拉框里,选择Publish articifacts to SCP Repository

  然后参考下图填写相应参数

  然后保存,再次build,观察Console Output
123456789...Build step 'Invoke Maven 3' changed build result to SUCCESS[spring-boot-rest-framework] $ /bin/bash -xe /var/folders/sk/2f7knc1518g57382y5s4zxsr0000gn/T/hudson5867298139164607521.sh+ cd /Users/yjmyzz/.jenkins/workspace/spring-boot-rest-framework+ cd target+ tar zcf deploy.tar.gz spring-boot-rest-framework-1.0.0.jar[SCP] Connecting to deploy[SCP] uploading file: '/opt/deploy/deploy.tar.gz'Finished: SUCCESS  从输出看,上传文件已经ok
  四、远程应用重启
  最后就是远程将上传文件解压,并启动应用,我们可以事先写一个shell脚本,放在服务器上(或者参考上一步的做法,用scp插件上传到服务器),脚本内容参考下面这样:
12345678910111213141516171819#!/bin/bashexport JAVA_HOME=/opt/app/jdk1.8.0_65echo ${JAVA_HOME}dir_base=/opt/deploycd ${dir_base}echo 'deploying...'if [ -r 'deploy.tar.gz'  ];then  tar -zxvf deploy.tar.gzfirm -rf *.gzrm -rf ${dir_base}/logsjar_name='spring-boot-rest-framework-1.0.0.jar'if [ $(pgrep -f ${jar_name} | wc -l) -gt 0 ]; then  pkill -9 -f ${jar_name}fiecho ${dir_base}/${jar_name}nohup ${JAVA_HOME}/bin/java -jar ${dir_base}/${jar_name} >/dev/null 2>&1 &sleep 2echo 'ok!'  这段脚本的大概意思是,先检测指定目录下有无deploy.tar.gz文件,有的话就解压,本文中的项目是一个spring-boot的项目,解压开后就是一个可独立运行的jar包,然后先检测当前进程中是否已经在运行,如果有,则先kill掉进程,最后用nohup以后台方式运行jar包。假设该脚本文件名为deploy.sh,具备执行权限,我们可以在jenkins中通过插件远程调用它,参考下图的配置:
  

  最后build下,还是观察console output的变化:
1234567891011121314151617181920Build step 'Invoke Maven 3' changed build result to SUCCESS[spring-boot-rest-framework] $ /bin/bash -xe /var/folders/sk/2f7knc1518g57382y5s4zxsr0000gn/T/hudson3712003549124736229.sh+ cd /Users/yjmyzz/.jenkins/workspace/spring-boot-rest-framework+ cd target+ tar zcf deploy.tar.gz spring-boot-rest-framework-1.0.0.jar[SCP] Connecting to deploy[SCP] uploading file: '/opt/deploy/deploy.tar.gz'SSH: Connecting from host [yangjunmingdeMacBook-Pro.local]SSH: Connecting with configuration [deploy] ...SSH: EXEC: STDOUT/STDERR from command [/opt/deploy/deploy.sh] .../opt/app/jdk1.8.0_65deploying...spring-boot-rest-framework-1.0.0.jartar: spring-boot-rest-framework-1.0.0.jar: time stamp 2016-01-20 22:52:15 is 143461.67416312 s in the future/opt/deploy/spring-boot-rest-framework-1.0.0.jarok!SSH: EXEC: completed after 2,230 msSSH: Disconnecting configuration [deploy] ...SSH: Transferred 0 file(s)Finished: SUCCESS  从第16行输出的ok来看,远程部署已经成功。  
  最后上一张图,大致描述了整个流程:



运维网声明 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-562286-1-1.html 上篇帖子: jenkins使用教程(上) 下篇帖子: jenkins+svn
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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