看上去好久没更新了…不对…是压根没更新,由于最近有事所以有耽搁了。不过这一期我来说说持续集成的相关的内容,这一期主要讲讲为什么要使用jenkins,如何安装。
为什么我们需要持续集成?
首先我们来讲述一下一个应用是如何从开始到上线的大致过程,首先就是产品经理设计产品->程序员根据产品经理规划的产品进行制作(就是撸代码的过程)->运维将应用上线到测试环境->测试人员进行测试->测试通过通过运维人员上线到生产环境中。
看上去过程挺简单的,其实开发的程序哪能没有bug?所以中间可能还会增加双重测试环境,一个叫做测试环境一个叫做模拟生产环境。并且运维工作中还会涉及到重复的对修改好的软件包进行上传再测试,手动上传可能会出现认为失误导致测试失败,如果在生产环境中失误后果不堪设想。所以一个良好的持续集成软件是在频繁上线应用的公司中大受欢迎!
持续集成对现代公司有哪些简便之处?
首先对运维人员来说:
- 通过自定义的自动化脚本让持续集成软件通过脚本将编译完毕的包进行打包并传送到指定应用下、解压、并且将应用重新启动。这看上去好像没有什么?作为一个会写脚本的运维来说小kiss也无需弄一个持续集成软件占用服务器资源?不过强大之处不在这里。首先如果测试出现失误将有bug的应用上传到生产环境中去作为运维该怎么办?肯定是需要回滚到上个版本中去。难道你还要写个脚本进行回滚吗?回滚到哪个版本你有留存吗?是不是要对脚本改写变量?这些都需要时间,不过可能你还会说使用软连接不就OK了?如果线上版本有问题只需要将软连接改变一下就能恢复到之前版本。不过有个问题如果这个应用有依赖应用,并且放置在大型集群上面。你该怎么办?如果线上应用有BUG要回滚到之前版本你的内心一定是紧张的,难免会执行错误命令导致雪崩效应。所以有了持续集成,你只需要知道之前版本部署的TAG号,重新再次执行以下就能全部搞定!又快又省心。
- 使用持续集成软件对企业开发的应用自动部署上线…对于开发较多或者开发的应用较多场景如果手动发布上线那么运维每天的工作就是配合开发进行上线测试了,那就没时间来扩展和修改企业拓扑架构了。持续集成对于上线的应用都有定时上线的功能,对于一些测试环境可以完全和开发将时间定下并且预定执行这样比较减少重复劳力大大增加时间成本。
接下来对开发人员来说:
- 由于开发者在工作中并不是独自一人完成工作肯定是需要多个开发者一同协作开发,那么开发者最常用的代码管理一个是git还有一个就是maven对于开发者来说这两个工具看上去比svn(subversion的客户端)要好很多。当然今天说的不是开发者的协同工具…而是使用持续集成工具对git中传送的代码进行构建!
- 构建也可能会遇到依赖,这个肯定对于开发人员除了技术总监之外可能会不太清楚。所以使用持续集成软件可以进行设定对于有依赖的包进行先行构建后再构建需要构建的包以免编译时出错!大大减少开发成本。
- 对代码进行测试,如果全权交给测试工程师测试那工作量简直就是翻天了,所以对于开发人员或者测试人员来说使用测试工具是比较好的选择,但是如果将测试工具能够被持续集成软件进行管理那就大大减少了沟通成本,可以由测试人员定时执行,如果程序较大可以夜间执行这样流出时间做别的事情。
看上去持续集成软件还是不错的,那么接下来说说jenkins!
什么是jenkins?
不过在说jenkins之前首先得说说hudson。其实这两个软件其实出自于同一个人,并且hudson属于sun公司下面的一款开源的持续集成类的产品。想要了解一下历史的可以通过搜索引擎进行查看!后来万恶的oracle将sun拿下之后竞争结束了,hudson被收入oracle囊中。当然著名开源的数据库mysql也难逃魔抓….后来hudson的成员与mysql一样组建一个开源社区软件起名叫做jenkins版本较新,比hudson好一些,不过如果你想选择稳定还是选择hudson。
jenkins是一款代表持续集成的软件,使用JAVA语言研发的一个web端的程序(可以想象成放在tomcat上的程序),当然如果你比较喜欢CLI极客一些的话可以使用COMMAND命令管理(我认为没什么必要),关于jenkins的好处我在之前持续集成对现代企业的好处中有说过,jenkins在各个企业中也是经常使用到。所以学会使用jenkins是现代运维必须掌握的一个工具。
如何安装jenkins?
安装jenkins有多种办法,可以直接yum安装,也可以使用tomcat代理,甚至可以在tomcat之前放httpd | nginx做代理或者负载均衡器。只要你想怎么操作都行,不过配置的基础是需要jdk才行。切记切记,到时候别安装好了不能启动那就糟糕了。
使用rpm包安装jenkins:
首先需要去jenkins官网上下载rpm包,如果你是debian系的话可以下载deb包进行安装。不过我推荐jenkins安装在debian系上…当然redhat系的同志们看完肯定会喷我…所以下载什么包自行决定。官网是www.jenkins.io找到download在首页非常明显,进去之后又LTS和WEEKLY两个分支可供下载,一个是稳定版本一个是开发测试版本。当然下载左边的稳定版本!不过如果企业在测试环境中使用我建议下载测试版本进行测试。随后选择好安装的操作系统(docker用户请自行拉取),我这里下载是rpm包!
其次别忘了安装jdk关于安装jdk我在这里有提到过,请自行选择是yum还是上oracle下载!
首先这里使用最为简单的rpm来安装jenkins,安装上面的我们准备好jdk包和jenkins的rpm包(debian用户等请自行下载相关包组)
[root@node1 ~] wget https://pkg.jenkins.io/redhat-stable/jenkins-2.46.3-1.1.noarch.rpm #随后准备好这些就行! [root@node1 ~]# ll -rw-r--r-- 1 root root 165955188 Oct 18 2016 jdk-8u101-linux-x64.rpm -rw-r--r-- 1 root root 70141751 May 27 06:04 jenkins-2.46.3-1.1.noarch.rpm #随后安装这两个包 [root@node1 ~]# yum localinstall jdk-8u101-linux-x64.rpm jenkins-2.46.3-1.1.noarch.rpm
可能有人会问,jenkins是基于java写的应用,但是如果没有web应用服务器来支持jenkins我们如何通过web进行管理呢?其实答案非常简单。jenkins其实是已经附带了一个非常缩减版本的一个web应用服务器专门给小型公司所使用。由于这个web应用服务器非常简单,如果要实现复杂功能建议还是使用tomcat然后前端加上httpd | nginx比较合适。
首先我们看看jenkins安装生成了哪些包?顺便给jdk添加环境变量。
[root@node1 ~] vim /etc/profile.d/java.sh export JAVA_HOME=/usr/java/latest export PATH=$JAVA_HOME/bin:$PATH [root@node1 ~] source /etc/profile.d/java.sh #环境变量添加完毕接下来看看jenkins增加了哪些包? [root@node1 ~] rpm -ql jenkins-2.46.3-1.1 /etc/init.d/jenkins /etc/logrotate.d/jenkins /etc/sysconfig/jenkins /usr/lib/jenkins /usr/lib/jenkins/jenkins.war /usr/sbin/rcjenkins /var/cache/jenkins /var/lib/jenkins /var/log/jenkins
看上去安装的包并不是很多呀!首先init.d下面的肯定是启动停止等相关操作脚本。然后配置文件在sysconfig下面的jenkins。我们现在去配置文件看看哪些需要修改的!
## Path: Development/Jenkins ## Description: Jenkins Automation Server ## Type: string ## Default: "/var/lib/jenkins" ## ServiceRestart: jenkins # # Directory where Jenkins store its configuration and working # files (checkouts, build reports, artifacts, ...). # JENKINS_HOME="/var/lib/jenkins" ## Type: string ## Default: "" ## ServiceRestart: jenkins # # Java executable to run Jenkins # When left empty, we'll try to find the suitable Java. # JENKINS_JAVA_CMD="" ## Type: string ## Default: "jenkins" ## ServiceRestart: jenkins # # 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="jenkins" ## Type: string ## Default: "false" ## ServiceRestart: jenkins # # Whether to skip potentially long-running chown at the # $JENKINS_HOME location. Do not enable this, "true", unless # you know what you're doing. See JENKINS-23273. # #JENKINS_INSTALL_SKIP_CHOWN="false" ## Type: string ## Default: "-Djava.awt.headless=true" ## ServiceRestart: jenkins # # Options to pass to java when running Jenkins. # JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true" ## Type: integer(0:65535) ## Default: 8080 ## ServiceRestart: jenkins # # Port Jenkins is listening on. # Set to -1 to disable # JENKINS_PORT="8080" #jenkins监听端口。默认8080 ## Type: string ## Default: "" ## ServiceRestart: jenkins # # IP address Jenkins listens on for HTTP requests. # Default is all interfaces (0.0.0.0). # JENKINS_LISTEN_ADDRESS="" #监听的地址默认是所有 ## Type: integer(0:65535) ## Default: "" ## ServiceRestart: jenkins # # HTTPS port Jenkins is listening on. # Default is disabled. # JENKINS_HTTPS_PORT="" #监听的https协议端口 ## Type: string ## Default: "" ## ServiceRestart: jenkins # # Path to the keystore in JKS format (as created by the JDK 'keytool'). # Default is disabled. # JENKINS_HTTPS_KEYSTORE="" #Https证书 ## Type: string ## Default: "" ## ServiceRestart: jenkins # # Password to access the keystore defined in JENKINS_HTTPS_KEYSTORE. # Default is disabled. # JENKINS_HTTPS_KEYSTORE_PASSWORD="" #https私钥 ## Type: string ## Default: "" ## ServiceRestart: jenkins # # IP address Jenkins listens on for HTTPS requests. # Default is disabled. # JENKINS_HTTPS_LISTEN_ADDRESS="" #https协议监听的地址 ## Type: integer(1:9) ## Default: 5 ## ServiceRestart: jenkins # # Debug level for logs -- the higher the value, the more verbose. # 5 is INFO. # JENKINS_DEBUG_LEVEL="5" #日志输出默认是info日志为5 ## Type: yesno ## Default: no ## ServiceRestart: jenkins # # Whether to enable access logging or not. # JENKINS_ENABLE_ACCESS_LOG="no" #是否打开访问日志? ## Type: integer ## Default: 100 ## ServiceRestart: jenkins # # Maximum number of HTTP worker threads. # JENKINS_HANDLER_MAX="100" #最大worker进程数量 ## Type: integer ## Default: 20 ## ServiceRestart: jenkins # # Maximum number of idle HTTP worker threads. # JENKINS_HANDLER_IDLE="20" ## Type: string ## Default: "" ## ServiceRestart: jenkins # # Pass arbitrary arguments to Jenkins. # Full option list: java -jar jenkins.war --help # JENKINS_ARGS=""
配置文件少的可怜,怪不得是简易的web应用服务器。不过里面也可以定义https这种加密的选项还是让企业感到安心的。关于常用的修改选项我已经在上面有注释标注!还有并发选项这些请自行查看,我就不详细写了。
安装完毕之后第二步就是启动它了,启动直接使用init.d下的脚本即可!
[root@node1 init.d]# ./jenkins start Starting Jenkins [ OK ] [root@node1 init.d]# ./jenkins status jenkins (pid 2357) is running...
随后过一会看看8080端口是否监听?由于是建议的web应用程序所以启动还是较慢的!随后打开你的游览器输入你的jenkins地址 | 域名然后跟上8080端口进入初始化状态。
随后如何初始化呢?我这里先不说先把如何使用tomcat作为jenkins的web应用程序之后再说!
使用tomcat作为代理jenkins的安装步骤:
其实安装更加容易,把jenkins的war压缩包解压丢给tomcat即可。想要了解tomcat看这里。这种方式安装jenkins非常方便,只要下载好war包即可!不过前提需要安装tomcat,安装我就简略的写一下详细的看tomcat专辑!
[root@node1 ~] yum localinstall jdk-8u101-linux-x64.rpm #安装jdk [root@node1 ~] tar -xf apache-tomcat-8.5.15.tar.gz -C /usr/local/ #解压到/usr/local中 [root@node1 local] ln -s apache-tomcat-8.5.15/ tomcat #添加软连接 [root@node1 local] cat /etc/profile.d/java.sh #添加jdk环境变量 export JAVA_HOME=/usr/java/latest export PATH=$JAVA_HOME/bin:$PATH [root@node1 local] cat /etc/profile.d/tomcat.sh #添加tomcat环境变量 export CATALINA_BASE=/usr/local/tomcat export PATH=$CATALINA_BASE/bin:$PATH [root@node1 ~] source /etc/profile.d/java.sh [root@node1 ~] source /etc/profile.d/tomcat.sh [root@node1 conf]# vim /usr/local/tomcat/conf/server.xml <Engine name="Catalina" defaultHost="172.16.1.10"> #将默认主机修改为这个 </Host> #添加一个虚拟主机 <Host name="172.16.1.10" appBase="/var/www" unpackWARs="true" autoDeploy="true"> <Context path="/" docBase="jenkins"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/var/logs" prefix="myapp_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Context> </Host> [root@node1 conf] mkdir -p /var/www/jenkins [root@node1 conf] cd /var/www/jenkins [root@node1 www] mv /root/jenkins.war . [root@node1 www] jar -xf jenkins.war
随后输入地址进入初始化环境!还记得上面哪张图吗?我这里还得使用它。接下来说说初始化!
初始化jenkins:
首先进入输入密码的初始化界面:
这里告诉我们密码在/var/lib/jenkins……这个地方,不过rpm包安装才会在这里如果是tomcat代理的则会在/root/.jenkins/secrets/initialAdminPassword总之会提示你在哪里,然后我们找到密码贴上去即可!然后会出现选择安装插件,这里我推荐选择推荐安装插件。jenkins的插件其实是最关键的,比如与maven、git、subversion连接或者与一些代码升级软件相连接的插件等!我推荐的是选择第一个:安装推荐的插件,我感觉这些企业应该会用到。
插件安装完毕那么就差添加一个管理员用户了,添加用户如下为例子:
好了初始化完毕之后会自动进入jenkins的主页面:
结语:
安装jenkins是不是非常方便?其实安装并不是什么大事,关键的还是需要和企业生产环境中程序员需要用到的git maven (maven仓库比如Nexus)等进行结合并且配合脚本让企业开发的应用能够自动化部署。才算将jenkins发挥起来,这里我只介绍了安装jenkins所以后面还得介绍安装git maven等工具。
对了如果企业有要求需要不希望tomcat直接暴露提供web服务的话可以考虑使用nginx httpd来反向代理,关于反向代理我已经在之前的博客中写过如果需要可以看看这个!
Comments