Jenkins 基础 01 简介与部署详解

网友投稿 547 2022-09-27

Jenkins 基础 01 简介与部署详解

Jenkins 基础  01 简介与部署详解

简单介绍

​​Jenkins​​前身是Hudson,使用java语言开发的自动化发布工具。在中大型金融等企业中普遍使用Jenkins来作为项目发布工具。 Jenkins官方提供的插件使Jenkins更为强大。Jenkins是一个自动化服务器,目前发展超过15年,比较成熟的CI工具(也可以CD)能够实现自动化集成发布。建立好流水线后,期间无需专业运维人员介入,开发人员随时发布部署,任性!。

传统应用发布模式

一般一个开发团队中都会存在多个角色:开发、测试、运维。当时我们的应用发布模式可以能是这样的:

开发同学进行项目代码开发,本地运行测试成功后将代码上传到版本控制系统。开发同学通知运维同学项目可以发布了,然后运维同学-代码进行打包和构建,生成应用制品。运维同学使用部署脚本将生成的制品部署到测试环境,并提示测试同学可以进行产品的测试。测试同学开始进行手动、自动化测试,测试完成后提醒运维同学可以进行预生产环境部署。运维同学开始进行预生产环境部署,然后测试同学进行测试,测试完成后,开始部署生产环境。

手动操作很多、出现的问题很多。上面看似很流畅的过程,其实每次构建或发布都可能会出现问题。未对每次提交验证、构建环境不一致:开发人员本地测试成功后提交代码,运维同学-代码进行编译却出现了错误。

Jenkins简介与应用场景

对于持续集成工具现在也有很多,目前应用最多的是Jenkins。Jenkins前身是Hudson,使用java语言开发的自动化发布工具。Jenkins是跨平台的可以在Win、Linux、MacOS部署。Jenkins是应用最广的开源免费的持续集成服务器,企业中普遍使用Jenkins来作为项目集成发布工具。Jenkins官方提供的插件使Jenkins更为强大。目前发展超过15年,比较成熟的CI工具(也可以CD)能够实现自动化集成发布。目前普遍使用Jenkins完成持续集成CI/持续部署CD等相关技术实践。 可以把Jenkins想象成一个脚本执行器,我们可以通过编写代码的方式灵活的控制Jenkins作业的运行与控制。

Jenkins是一个自动化服务器,目前发展超过15年,比较成熟的CI工具(也可以CD)能够实现自动化集成发布。建立好流水线后,期间无需专业运维人员介入,开发人员随时发布部署,任性!。

Jenkins就是一个自动化的服务器,实现自动化的脚本叫pipeline,脚本里面的各个函数叫做stage,CI是持续集成,也就是编译打包,CD就是发布,将软件发布到环境当中,比如通过ansible工具。我们现在这块CI/CD还是使用jenkins,从代码拉取到编译打包以及发布都是使用jenkins。

应用场景

持续集成实践

集成svn/git客户端实现源代码-检出集成maven/ant/gradle/npm等构建工具实现源码编译打包单元测试集成sonarqube对源代码进行质量检查(坏味道、复杂度、新增bug等)

持续部署实践

集成SaltStack/Ansible实现自动化部署发布

自动化测试实践

集成Jmeter/Soar/Kubernetes/.....

jenkins核心就是流水线

传统运维,开发人员写完代码了,然后交给测试去部署测试环境,测试测试好了交给运维部署到预生产和生产环境。建立了稳定的流水线,可以分为三条流水线,一条测试流水线,一条预生产流水线,一条是生产流水线。

Jenkins要想实现源代码的-,需要集成svn或者git,这样就可以-代码了,jenkins只是调用git客户端去-代码,并不是jenkins本身就有-代码的功能,这个都是需要插件去实现的。(如果你代码编译出现问题,一般都不会是jenkins出现问题,你得好好排查你的代码)

Jenkins安装部署

关于Jenkins的安装可以使用rpm或者war包安装,需要提前安装好JDK8+环境。 Jenkins采用分布式架构,分为server节点和agent节点。server节点也是可以运行构建任务的,但我们一般使其主要来做任务的调度。(毕竟server节点挂了就都...)agent节点专门用于任务的执行。随着现在容器的盛行,我们可以将server节点和agent节点在容器或者基于Kubernetes中部署。关于agent节点借助容器可以实现动态的资源分配等等好处。agent节点可以分为静态节点和动态节点。静态节点是固定的一台vm虚机或者容器。动态节点是随着任务的构建来自动创建agent节点。

Server端负责主要负责调度,也就是master端,agent端是正式去执行任务的

Jenkins软件平台部署

Jenkins官网免费获取Jenkins软件,官网地址为:​​JDK开发软件。Jenkins平台搭建步骤如下:

RPM部署jenkins

安装JDK环境

如果使用rpm的方式安装的Jenkins需要提前安装好JDK,Jenkins Slave运行也需要使用JDK。

​​zxf OpenJDK8U-jdk_x64_linux_hotspot_8u282b08.tar.gz -C /usr/localcd /usr/loca/jdk8u282-b08pwdvim /etc/profileexport JAVA_HOME=/usr/local/jdk8u282-b08export PATH=$JAVA_HOME/bin:$PATHsource /etc/profilejava -versionopenjdk version "1.8.0_282"OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_282-b08)OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.282-b08, mixed mode)

安装Jenkins Master

​​~]# rpm -qa | grep jenkins[root@jenkins-master ~]# rpm -e jenkinserror: package jenkins is not installed[root@jenkins-master ~]# rpm -ivh jenkins-2.277.1-1.1.noarch.rpm warning: jenkins-2.277.1-1.1.noarch.rpm: Header V4 RSA/SHA512 Signature, key ID 45f2c3d5: NOKEYPreparing... ################################# [100%]Updating / installing... 1:jenkins-2.277.1-1.1 ################################# [100%]

Jenkins的配置文件

[root@jenkins-master ~]# cat /etc/sysconfig/jenkins Jenkins的数据目录,家目录就放这了JENKINS_HOME="/var/lib/jenkins"修改为rootJENKINS_USER="root"看看端口有没有被占用[root@jenkins-master ~]# netstat -tpln | grep 8080如果启动报错如下,需要做个软链接[root@jenkins-master ~]# service jenkins startStarting jenkins (via systemctl): Job for jenkins.service failed because the control process exited with error code. See "systemctl status jenkins.service" and "journalctl -xe" for details. [FAILED][root@jenkins-master ~]# service jenkins status?.jenkins.service - LSB: Jenkins Automation Server Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled) Active: failed (Result: exit-code) since Sun 2021-03-28 20:10:56 CST; 5min ago Docs: man:systemd-sysv-generator(8) Process: 1309 ExecStart=/etc/rc.d/init.d/jenkins start (code=exited, status=1/FAILURE)Mar 28 20:10:56 jenkins-master systemd[1]: Starting LSB: Jenkins Automation Server...Mar 28 20:10:56 jenkins-master runuser[1314]: pam_unix(runuser:session): session opened for user root by (uid=0)Mar 28 20:10:56 jenkins-master jenkins[1309]: Starting Jenkins bash: /usr/bin/java: No such file or directoryMar 28 20:10:56 jenkins-master jenkins[1309]: [FAILED]Mar 28 20:10:56 jenkins-master systemd[1]: jenkins.service: control process exited, code=exited status=1Mar 28 20:10:56 jenkins-master systemd[1]: Failed to start LSB: Jenkins Automation Server.Mar 28 20:10:56 jenkins-master systemd[1]: Unit jenkins.service entered failed state.Mar 28 20:10:56 jenkins-master systemd[1]: jenkins.service failed.[root@jenkins-master ~]# ln -s /usr/local/jdk8/bin/java /usr/bin/java[root@jenkins-master ~]# service jenkins startStarting jenkins (via systemctl): [ OK ][root@jenkins-master ~]# systemctl status jenkins?.jenkins.service - LSB: Jenkins Automation Server Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled) Active: active (running) since Sun 2021-03-28 20:22:36 CST; 4min 34s ago Docs: man:systemd-sysv-generator(8) Process: 1417 ExecStart=/etc/rc.d/init.d/jenkins start (code=exited, status=0/SUCCESS) CGroup: /system.slice/jenkins.service ?..1436 /usr/bin/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/j...Mar 28 20:22:34 jenkins-master systemd[1]: Starting LSB: Jenkins Automation Server...Mar 28 20:22:34 jenkins-master runuser[1422]: pam_unix(runuser:session): session opened for user root by (uid=0)Mar 28 20:22:36 jenkins-master jenkins[1417]: Starting Jenkins [ OK ]Mar 28 20:22:36 jenkins-master systemd[1]: Started LSB: Jenkins Automation Server.

rpm安装的也是war包

Docker Jenkins部署

版本  LTS: 2.277.1

docker pull jenkins/jenkins:2.277.1-lts-centos7mkdir -p /data/cicd/jenkinschmod 777 -R /data/cicd/jenkinsdocker run -itd --name jenkins \-p 8080:8080 \-p 50000:50000 \--privileged=true \-v /data/cicd/jenkins:/var/jenkins_home docker.io/jenkins/jenkins:2.277.1-lts-centos7##FAQ[root@jenkins-master ~]# docker logs -f jenkinstouch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission deniedCan not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?chmod 777 -R jenkins/

在使用docker 部署的时候5000端口要开出来,因为要部署slave

8080 Jenkins  web端访问端口50000  Jenkins与Agent建立连接所需要的端口

Tomcat热部署jenkins

配置你的Tomcat,并且进行优化

[root@localhost ~]# vim /usr/local/tomcat/bin/catalina.sh JAVA_OPTS="-server -Xms900m -Xmx900m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxNewSize=512m"[root@localhost ~]# ps -ef | grep java -server -Xms900m -Xmx900m -XX:PermSize=256m -XX:MaxPermSize=512m

unpackWARs="true"  是否自动解压war包autoDeploy="true"   自动部署,回头你只要往我的站点目录下/code丢一个war包,不需要重启tomcat,自动帮你解压,然后就可以访问了

[root@localhost ~]# mv jenkins.war ROOT.war[root@localhost ~]# cp ROOT.war /usr/local/tomcat/webapps/#查看日志可以看到tomcat解压并且部署上传的war包27-Oct-2020 17:37:52.957 INFO [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.startup.HostConfig.undeploy Undeploying context []27-Oct-2020 17:37:53.129 INFO [localhost-startStop-2] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive /usr/local/tomcat/webapps/ROOT.warJenkins home directory: /root/.jenkins found at: $user.home/.jenkins27-Oct-2020 17:38:18.475 INFO [localhost-startStop-2] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive /usr/local/tomcat/webapps/ROOT.war has finished in 25,346 ms27-Oct-2020 17:38:24.980 INFO [pool-7-thread-1] jenkins.InitReactorRunner$1.onAttained Started initialization27-Oct-2020 17:38:25.103 INFO [pool-7-thread-1] jenkins.InitReactorRunner$1.onAttained Listed all plugins27-Oct-2020 17:38:32.872 INFO [pool-7-thread-2] jenkins.InitReactorRunner$1.onAttained Prepared all plugins27-Oct-2020 17:38:32.907 INFO [pool-7-thread-2] jenkins.InitReactorRunner$1.onAttained Started all plugins27-Oct-2020 17:38:32.936 INFO [pool-7-thread-2] jenkins.InitReactorRunner$1.onAttained Augmented all extensions............................................................................27-Oct-2020 17:45:30.725 INFO [pool-7-thread-2] jenkins.InitReactorRunner$1.onAttained Completed initialization27-Oct-2020 17:45:30.930 INFO [Jenkins initialization thread] hudson.WebAppMain$3.run Jenkins is fully up and running[root@localhost ~]# ls /usr/local/tomcat/webapps/docs examples host-manager manager ROOT ROOT.war

部署成功之后输入密码

[root@localhost ~]# cat /root/.jenkins/secrets/initialAdminPasswordee0d75d5495b4ee1a522d6947a060065

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Tomcat catalina.properties
下一篇:Kubernetes 一文详解StatefulSet 控制器
相关文章

 发表评论

暂时没有评论,来抢沙发吧~