欢迎大家来到IT世界,在知识的湖畔探索吧!
在当今互联网行业乃至一些大厂,大部分公司都采用敏捷项目管理模式来管理项目,在敏捷十二条宣言中有一条是这样说:“我们的最高目标是,通过尽早和持续地交付有价值的软件来满足客户”,通过这一条我们可以看出,项目的持续集成和持续部署发布对客户来说是非常重要的。
通过网络搜索和查阅相关资料,能够完成CI/CD持续集成持续部署的工具有很多种,最常用的一般是赫赫有名的Jenkins。Jenkins是采用Java语言编写支持许多插件,除过基本的功能外其他的扩展功能都可以通过插件的形式来完成,包括集成现在比较火的Docker,Kubernetes,AWS等。
在实际的项目开发过程中,Jenkins的典型工作流如下图:
通过这张图我们可以简单的理解在整个CI/CD的工作流中,数据的流转是:
- DBA,Developer,Operations,Tester将代码提交到版本管理工具中,例如:GIT,SVN等;
- CI服务器会手动触发或者定时触发去版本管理工具中拉取代码进行编译,打包操作,在这个过程中还可以完成对代码的质量检查,单元测试等;
- CI服务器将打包后的二进制文件部署到目标服务器(环境)中,根据CI服务器的配置,如果配置了多个环境,可以将打包后的文件部署到SIT,UAT或者PROD等;
下面我们就通过一个简单的案例来看看Jenkins是如何实现CI/CD持续集成持续部署功能的,具体的环境如下:
- Linux Centos 7
- Jenkins latest
- Sonar latest
步骤一:通过官网下载Jenkins最新安装包
我们找到Jenkins的官网:https://jenkins.io/zh/
通过上图我们可以看到Jenkins支持许多操作系统和环境部署,而且我们还可以通过官网下载到Jenkins的源代码,在这里我们下载最新的二进制文件war包,它可以部署到Tomcat也可以通过命令行的方式启动,我们采用第二种方式命令行的方式部署Jenkins。
步骤二:编写Jenkins启动脚本start_jenkins.sh
#!/bin/bash # Author:xiaobaoqiang JENKINS_LOG=/tmp/jenkins.log JENKINS_JAR=/root/jenkins.war PID_FILE=/run/jenkins.pid # start function function start(){ # pring message echo "Checking jenkins ..." # check Jenkins is running or not PID=`ps auwx | grep ${JENKINS_JAR} | grep -v grep | awk '{print $2}'` if [ $PID ]; then echo "Jenkins is Running at PID:$PID, Don't start again." exit 0 else echo "Jenkins is not running, will be started." fi # pring message echo "Jenkins starting ..." # start jenkins nohup java -jar ${JENKINS_JAR} > ${JENKINS_LOG} 2>&1 & # start jenkins status status=$? if [[ $status != 0 ]]; then echo "Failed to start jenkins, return code: $status. Please check ${JENKINS_LOG} for more information." exit $status; fi # sleep sleep 2s # PID PID=`ps auwx | grep ${JENKINS_JAR} | grep -v grep | awk '{print $2}'` if [ ! $PID ]; then echo "Start jenkins Failed. Please check ${JENKINS_LOG} for more information." else echo $PID > ${PID_FILE} echo "Jenkins is started at PID:$PID" fi } # stop function function stop(){ # pring message echo "Jenkins stopping ..." # PID PID=`ps auwx | grep ${JENKINS_JAR} | grep -v grep | awk '{print $2}'` if [ ! $PID ]; then echo "Jenkins is not running. Please check jenkins is running or not." else kill -9 $PID rm -f ${PID_FILE} echo "Jenkins is stopped." fi } # restart function function restart(){ stop start } # status function function status(){ # pring message echo "Checking jenkins ..." # PID PID=`ps auwx | grep ${JENKINS_JAR} | grep -v grep | awk '{print $2}'` if [ ! $PID ]; then echo "Jenkins is not running. Please check jenkins is running or not." else echo "Jenkins is started at PID:$PID" fi } case "$1" in start ) echo "************************************************" start echo "************************************************" ;; stop ) echo "************************************************" stop echo "************************************************" ;; restart ) echo "************************************************" restart echo "************************************************" ;; status ) echo "************************************************" status echo "************************************************" ;; * ) echo "************************************************" echo "Usage: start_jenkins.sh ( commands ... )" echo "commands:" echo " start start jenkins" echo " stop stop jenkins" echo " restart restart jenkins" echo " status status jenkins" echo "************************************************" ;; esac exit 0
欢迎大家来到IT世界,在知识的湖畔探索吧!
上面的Jenkins启动脚本包括了Jenkins的启动,停止和重启功能。
我们也可以通过下面一条简单的命令来启动Jenkins:
欢迎大家来到IT世界,在知识的湖畔探索吧!java -jar jenkins.war
通过这种简单的方式当我们按Ctrl+C或者关闭命令行的时候,Jenkins就会被停止掉。
步骤三:启动Jenins服务
通过上一步骤我们编写的启动脚本启动Jenkins
[root@dev01 ~]# ./start_jenkins.sh start ************************************************ Checking jenkins ... Jenkins is not running, will be started. Jenkins starting ... Jenkins is started at PID:20755 ************************************************
查看下Jenkins的启动日志:
欢迎大家来到IT世界,在知识的湖畔探索吧!十月 27, 2019 11:08:03 上午 org.springframework.context.support.AbstractApplicationContext prepareRefresh 信息: Refreshing org.springframework.web.context.support.StaticWebApplicationContext@43a00e48: display name [Root WebApplicationContext]; startup date [Sun Oct 27 11:08:03 CST 2019]; root of context hierarchy 十月 27, 2019 11:08:03 上午 org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory 信息: Bean factory for application context [org.springframework.web.context.support.StaticWebApplicationContext@43a00e48]: org.springframework.beans.factory.support.DefaultListableBeanFactory@6de44024 十月 27, 2019 11:08:03 上午 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons 信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@6de44024: defining beans [filter,legacy]; root of factory hierarchy 十月 27, 2019 11:08:03 上午 jenkins.InitReactorRunner$1 onAttained 信息: Completed initialization 十月 27, 2019 11:08:03 上午 hudson.WebAppMain$3 run 信息: Jenkins is fully up and running
通过日志信息可以看到Jenkins已经完全启动了。
步骤四:登陆Jenkins
我们以管理员root的身份登陆Jenkins,打开http://localhost:8080/pluginManager/ 可以查看和安装我们需要的插件,对Java语言来说最常用的应该是Maven插件了
可以看到,通过上面简单的步骤一个Jenkins服务我们已经部署成功了,然后我们就可以利用我们的Jenkins服务来部署和发布我们的项目了,达到持续部署持续集成的目的。
参考:
https://jenkins.io/zh/doc/book/installing/
文章如有不妥之处,欢迎指正!谢谢!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/49322.html