CI/CD介绍与jenkins部署
CI/CD简介
互联网软件的开发和发布,已经形成了一套标准流程,假如把开发工作流程分为以下几个阶段:
编码 --> 构建 --> 集成 --> 测试 --> 交付 --> 部署
在软件开发和运维领域,我们经常会听到很多概念,比如DevOps,持续集成(CI,Continuous Integration),持续交付(CD,Continuous Delivery),持续部署(CD,Continuous Deployment)等等。这些新的概念、方法论和工具的出现,主要是为了应对目前业务的挑战。主要是要求业务推出和运维即“快”又“稳”:
- 快:比竞争对手更快的创新、试验和部署业务的能力。快速推出业务、快速获取反馈、快速迭代、快速试错。
- 稳:快速、频繁地特性发布,同时保证业务和系统的稳定性、可用性和持久性。
下面我们稍微解释一下持续集成(CI,Continuous Integration),持续交付(CD,Continuous Delivery),持续部署(CD,Continuous Deployment)的概念。
- 持续集成(CI,Continuous Integration):持续集成指的是,频繁地(一天多次)将代码集成到主干。持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。
- 持续交付(CD,Continuous Delivery):持续交付指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。
- 持续部署(CD,Continuous Deployment):持续部署是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。
三个概念: 持续集成CI: 代码合并,构建,部署,测试都在一起,不断的执行这个过程,并对结果进行反馈。
通过这个过程,在未上线前去反复测试,减少上线后出现bug的几率
持续部署CD: 部署到测试环境,预生产环境,生产环境。
持续交付:CD: 把最终的产品发布到生产环境中,让用户去使用,在使用的过程中反馈结果。
这个过程涉及到运维,开发,测试。
CI/CD的最终目的是为了减少人工干预,实现自动化,提高产品交付的效率和质量。
注意:发布前一定要备份文件
jenkins是什么?
? Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。
Jenkins的功能
Jenkins的主要功能是将项目中重复执行的工作自动化的执行。如软件的建造(构建)和在配置文件下设置的job。具体功能大概有:
1.软件的持续构建和测试,Jenkins提供了一个系统,使开发人员可以很容易的将改变集成到工程中。自动化的,持续的构建有利于提高开发效率。
2.监视job的执行,job可以实现很多的功能,Jenkins可以对这些项目进行显示,让用户更清楚的注意到这些损毁的job。
3.项目源代码修改的检测,jenkins能够从项目的Subversion/CVS生成最近修改的集合列表,且不会增加Subversion/CVS Repository的负载。
4.分布式构建,Jenkins可以将工程构建到多台机器,更好地利用硬件资源,节省时间。
其他,Jenkins代码开源,用户可以自己编写插件。所以jenkins可以实现很多的功能。
jenkins部署
安装jdk开发环境
[root@server2 ~]# yum -y install java-11-openjdk*
[root@server2 ~]# java -version
openjdk version "11.0.12" 2021-07-20 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.12+7-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.12+7-LTS, mixed mode, sharing)
下载包jenkins.war
https://get.jenkins.io/war-stable/2.303.2/jenkins.war
下载tomcat
[root@server2 ~]# wget https://archive.apache.org/dist/tomcat/tomcat-10/v10.0.12/bin/apache-tomcat-10.0.12.tar.gz
解压
[root@server2 ~]# tar xf apache-tomcat-10.0.12.tar.gz -C /usr/local/tomcat
[root@server2 ~]# ls
anaconda-ks.cfg
apache-tomcat-9.0.54.tar.gz
jenkins.war
进入 /usr/local目录
[root@server2 local]# pwd
/usr/local
[root@server2 local]# ls
bin games lib libexec share tomcat
etc include lib64 sbin src
开启服务
[root@server2 tomcat]# /usr/local/tomcat/bin/catalina.sh start
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
[root@server2 tomcat]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 100 *:8080 *:*
LISTEN 0 128 *:80 *:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 1 [::ffff:127.0.0.1]:8005 *:*
访问网页
关闭服务
[root@server2 ~]# /usr/local/tomcat/bin/shutdown.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
[root@server2 ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 *:80 *:*
LISTEN 0 128 [::]:22 [::]:*
[root@server2 ~]# ps -ef | grep tomcat
root 154340 26434 0 22:00 pts/2 00:00:00 grep --color=auto tomcat
移动目录
[root@server2 tomcat]# pwd
/usr/local/tomcat
[root@server2 tomcat]# ls
BUILDING.txt README.md conf webapps
CONTRIBUTING.md RELEASE-NOTES lib work
LICENSE RUNNING.txt logs
NOTICE bin temp
[root@server2 tomcat]# mv webapps/* /opt/
[root@server2 tomcat]# cd webapps/
[root@server2 webapps]# mkdir ROOT
[root@server2 webapps]# mv ~/jenkins.war .
[root@server2 webapps]# ls
ROOT jenkins.war
访问网页
重启tomcat服务
[root@server2 ~]# /usr/local/tomcat/bin/shutdown.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
[root@server2 webapps]# /usr/local/jenkins/bin/catalina.sh start
Using CATALINA_BASE: /usr/local/jenkins
Using CATALINA_HOME: /usr/local/jenkins
Using CATALINA_TMPDIR: /usr/local/jenkins/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/jenkins/bin/bootstrap.jar:/usr/local/jenkins/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
[root@server2 webapps]#
[root@server2 webapps]#
[root@server2 webapps]# ls
ROOT jenkins jenkins.war #会自动解压
[root@server2 webapps]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 1 [::ffff:127.0.0.1]:8005 *:*
LISTEN 0 100 *:8080 *:*
LISTEN 0 128 *:80 *:*
访问网页 192.168.131:8080/jenkins
查看密码
[root@server2 webapps]# cat /root/.jenkins/secrets/initialAdminPassword
cbc03f2a340b44cbad25ed48cdc8f155
[root@server2 webapps]#
输入密码
|