Jenkins#构建CI/CD持续集成/持续发布平台

Jenkins构建CI/CD持续集成/持续发布平台

一、CI/CD持续集成/持续发布

开发(git) -->git主库–>jenkins(git+jdk+tomcat+maven打包+测试)–>发布到tomcat服务器
英文全称:Continuous Integration
  CI:中文全称:持续集成工具
  持续集成是一种软件开发实践。在持续集成中,团队成员频繁集成他们的工作成果,一般每人每天至少集成一次,也可以多次。每次集成会经过自动构建(包括自动测试)的检验,以尽快发现集成错误。

二、Jenkins

1、Jenkins概述

Jenkins是帮我们将代码进行统一的编译打包、还可以放到tomcat容器中进行发布。意思是我们通过配置,将以前:编译、打包、上传、部署到Tomcat中的过程交由Jenkins,Jenkins通过给定的代码地址URL,将代码拉取到其“宿主服务器”(Jenkins的安装位置),进行编译、打包和发布到web容器中。 是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控一些定时执行的任务。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。jenkins通常与版本管理工具(SCM)、构建工具结合使用;常用的版本控制工具有SVN、GIT。jenkins构建工具有Maven、Ant、Gradle。SCM英文全称:Source Control Management (Software Version Control)中文全称:源码控制管理软件 版本控制

2、Jenkins目标

监控软件开发流程、快速显示问题、提高开发效率、过程控制

3、Jenkins特性

易于安装: 不需要安装、不需要数据库,只需通过java -jar jenkins.war或部署到一个servlet容器中
易于配置:所有的配置都可能通过jenkins提供的web界面完成,当然如果你喜欢,也可以通过手动修改xml文件进行配置
检测报告:生成JUnit或TestNG的测试报告.集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知
文件识别:jenkins能跟踪每次构建生成哪些jar包以及使用哪个版本的jar包
分布式构建: 支持Jenkins能够让多台计算机一起构建/测试
插件支持: jenkins可以通过第三方插件扩展,也可以根据团队需要开发插件
任务(Job)和构建(build):
  任务:(Job)是Jenkins的一个执行计划,是一系列操作的集合
  构建:是Jenkins的任务的一次运行
工作流程: Jenkins就是这么一个CI系统。之前叫做Hudson
  1、开发者检入代码到源代码仓库。
  2、CI系统会为每一个项目创建了一个单独的工作区。当预设或请求一次新的构建时,它将把源代码仓库的源码存放到对应的工作区。
  3、CI系统会在对应的工作区内执行构建过程。
  4、(配置如果存在)构建完成后,CI系统会在一个新的构件中执行定义的一套测试。完成后触发通知(Email,RSS等等)给相关的当事人。
  5、(配置如果存在)如果构建成功,这个构件会被打包并转移到一个部署目标(如应用服务器)或存储为软件仓库中的一个新版本。软件仓库可以是CI系统的一部分,也可以是一个外部的仓库,诸如一个文件服务器或者像Java.net、 SourceForge之类的网站。
  6、CI系统通常会根据请求发起相应的操作,诸如即时构建、生成报告,或者检索一些构建好的构件。

三、Jenkins实战部署

环境,两台虚拟机
  有github账号,用作代码仓库
  10.11.67.38 4G内存的Centos7部署Jenkins
  10.11.67.42 2G内存的Centos7部署Tomcat

下面的部署是在10.11.67.38上部署Jenkins

1、部署GIT

安装依赖包:
[root@jenkins-server ~]# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker -y
官网下载GIT最新的版本:
[root@jenkins-server ~]# wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.9.5.tar.gz
解压GIT并且cd到解压目录进行编译安装:
[root@jenkins-server ~]# tar -xvf git-2.9.5.tar.gz -C /usr/local
[root@jenkins-server ]# cd git-2.9.5/
编译源码包、源码安装
[root@jenkins-server git-2.9.5]# make prefix=/usr/local/git all
[root@jenkins-server git-2.9.5]# make prefix=/usr/local/git install
添加GIT所需要的环境变量:
[root@jenkins-server ~]# vim /etc/bashrc

PATH=$PATH:$HOME/bin:/usr/local/git/bin

[root@jenkins-server ~]# source /etc/bashrc
关于bashrc和profile:
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次!!!登录!!!时,该文件被执行。 并从/etc/profile.d目录的配置文件中搜集shell的设置.
/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
测试GIT是否安装成功:
[root@jenkins-server ~]# git --version
git version 1.8.3.1

2、部署JDK环境

下载解压JDK并且cd到解压目录改名,注意不能用JDK9和JDK10:
[root@jenkins-server ~]# tar -xvf jdk-8u151-linux-x64.tar.gz -C /usr/local
[root@jenkins-server ~]# cd /usr/local/
[root@jenkins-server local]# mv jdk1.8.0_151/ jdk
添加JDK所需要的环境变量:
[root@jenkins-server local]# cd
[root@jenkins-server ~]# vim /etc/bashrc

JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin

[root@jenkins-server ~]# source /etc/bashrc
测试JDK环境是否安装成功:
[root@jenkins-server ~]# java -version
java version “1.8.0_151”
Java™ SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot™ 64-Bit Server VM (build 25.151-b12, mixed mode)
如果系统中已安装java-1.8.0-openjdk。java-1.8.0-openjdk 。java-1.8.0-openjdk请卸载他们。

3、部署maven

下载和解压Maven:
[root@jenkins-server ~]# # wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.5.3/binaries/apache-maven-3.5.3-bin.tar.gz
[root@jenkins-server ~]# tar -xvf apache-maven-3.5.3-bin.tar.gz -C /usr/local
[root@jenkins-server ~]# cd /usr/local/
[root@jenkins-server local]# mv apache-maven-3.5.3/ maven
[root@jenkins-server local]# cd
添加maven所需要的环境变量:
[root@jenkins-server ~]# vim /etc/bashrc

export M2_HOME=/usr/local/maven
export M2=$M2_HOME/bin
PATH=$M2:$PATH:$HOME/bin:/usr/local/git/bin
export JAVA_HOME=/usr/local/jdk
export PATH

[root@jenkins-server ~]# source /etc/bashrc
测试maven是否安装成功:
[root@jenkins-server ~]# mvn -version
Apache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-25T03:49:05+08:00)
Maven home: /usr/local/maven
Java version: 1.8.0_151, vendor: Oracle Corporation
Java home: /usr/local/jdk/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: “linux”, version: “3.10.0-693.el7.x86_64”, arch: “amd64”, family: “unix”

4、部署Tomcat

官网下载Tomcat解压Tomcat并且cd到解压目录改名:
[root@jenkins-server ~]# tar -xvf apache-tomcat-9.0.1.tar.gz -C /usr/local
[root@jenkins-server ~]# cd /usr/local/
[root@jenkins-server local]# mv apache-tomcat-9.0.1/ tomcat
[root@jenkins-server local]# cd
添加Tomcat所需要的环境变量:
[root@jenkins-server ~]# vim /etc/bashrc

CATALINA_HOME=/usr/local/tomcat
export CATALINA_HOME

[root@jenkins-server ~]# source /etc/bashrc
启动Tomcat:
[root@jenkins-server ~]# /usr/local/tomcat/bin/startup.sh
浏览器访问Tomcat是否安装成功:
http://10.11.67.38:8080
先关闭Tomcat:
[root@jenkins-server ~]# /usr/local/tomcat/bin/shutdown.sh
补充:配置Tomcat的角色和用户:
[root@jenkins-server ~]# vim /usr/local/tomcat/conf/tomcat-users.xml

5、部署Jenkins

官网下载Jenkins:
[root@jenkins-server ~]# http://updates.jenkins-ci.org/download/war/2.130
部署Jenkins.war到Tomcat的网站发布目录下:
[root@jenkins-server ~]# cp jenkins.war /usr/local/tomcat/webapps/
补充:如果Jenkins密码忘记了的重置方法:
关闭tomcat /usr/local/tomcat/bin/shutdown.sh
rm -rf /usr/local/tomcat/webapp/jenkins*
rm -rf ~/.jenkins*
cp jenkins.war /usr/local/tomcat/webapps/
启动tomcat即可访问jenkins
启动Tomcat:启动Tomcat会自动解压webapps下的war包:
[root@jenkins-server ~]# /usr/local/tomcat/bin/startup.sh
浏览器登录Jenkins:
http://10.11.67.38:8080/jenkins
复制自己的初始密码到页面:
[root@jenkins-server ~]# cat /root/.jenkins/secrets/initialAdminPassword
30783eda4f2a46c2bb5056d2e4aaf885
选择suggested的插件进行下载:
等待插件安装完成:
  因为网速原因,插件可能下载失败,重试两次(不要重新安装,这样会把已经下载好的插件重新下载),仍然失败。没关系,把他们记录下来,点击继续,进去之后手动重新安装未安装好的插件
点点点就安装成功了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果这个页面过一会消失了。并且常时间空白。可能需要你登录了。换个浏览器,打开相同的地址就会出现认证页面。
在这里插入图片描述
在这里插入图片描述

四、Jenkins插件管理

Deploy to container
Maven Integration
GitHub Authentication
GitHub Branch Source
GitHub Organization Folder
Publish Over SSH

1、插件管理插件管理简介

我们配置的是 git + maven 方式的 自动化部署 所以git和maven的相关插件是必须的 还有一个ssh用于机器间的文件传送。安装的过程请耐心等待

2、安装插件Deploy to container

作用:
支持自动化将代码部署到tomcat容器
安装过程:
  系统管理–>插件管理–>可选插件–>过滤Deploy to container–>勾选,点击下边的按钮:直接安装,这个可能时间较久,等待即可(过滤不到就换个过滤项继续过滤,也许已经安装了)
在这里插入图片描述
在这里插入图片描述

3、安装插件Maven Integration

作用:
jenkins 利用maven编译,打包,所需插件
安装过程:同第一个插件

4、安装git相关3个插件GIT plugin(过程一样)

GitHub Authentication
GitHub Branch Source
GitHub Organization Folder
在这里插入图片描述

5、安装和SSH相关的插件

Publish Over SSH

在这里插入图片描述

五、检查错误配置

左侧:点击“系统管理”

1、如果有“编码问题”错误,在Tomcat–>conf–>server.xml文件中修改即可

[root@localhost ~]# head -1 /usr/local/tomcat/conf/server.xml

2、如果有”反向代理设置有误“错误,请忽略

六、Jenkins系统设置

这里没有强调的都设置为默认即可
系统管理->(全局工具配置)Global Tool Configuration,配置jdk,git,maven的根目录

1、找到全局配置工具

在这里插入图片描述
在这里插入图片描述

2、配置JDK目录

在这里插入图片描述

3、配置GIT目录

在这里插入图片描述

4、配置maven并保存

在这里插入图片描述

在这里插入图片描述

5、关于Jenkins设置中文语言

在这里插入图片描述
在这里插入图片描述

6、关于Jenkins重启

http://192.168.43.114:8080/jenkins/restart
http://192.168.43.114:8080/jenkins/exit
http://192.168.43.114:8080/jenkins/reload

七、SSH设置

1、SSH设置的目的

jenkins服务器(10.11.67.38)上的maven将开发产生的*.war包。通过SSH自动推送到远程tomcat服务器上(10.11.67.42)需要手工配置ssh key。配合自动化推送
  10.11.67.38 4G内存的Centos7部署Jenkins
  10.11.67.42 2G内存的Centos7部署Tomcat(业务主机)

2、Jenkins服务器准备秘钥认证

[root@jenkins-server ~]# ssh-keygen
[root@jenkins-server ~]# ssh-copy-id -i 10.11.67.42
[root@jenkins-server ~]# ssh 10.11.67.42
Jenkins-server登录Tomcat业务主机不需要密码即可
准备SSH私钥,把私钥上传服务器
[root@jenkins-server ~]# cat ~/.ssh/id_rsa

在这里插入图片描述

在这里插入图片描述

八、最重要的浏览器点点点新增任务

1、创建任务

在这里插入图片描述

2、定义名称和类型

在这里插入图片描述

3、设置maven(共有GIT仓库)

设置描述
在这里插入图片描述

选择版本控制器和仓库地址
在这里插入图片描述

设置触发器
在这里插入图片描述

设置构建(编译打包)

在这里插入图片描述

在构建后设置中 选择:(send build artifacts over ssh)通过SSH发送构建工件

在这里插入图片描述
在这里插入图片描述
应用保存即可,下面是参数说明
在这里插入图片描述

九、新增任务之后,构建任务

1、立即构建

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2、查构建结果

在这里插入图片描述

出错也在这里看

Started by user kakaops
Started by user kakaops
Running as SYSTEM
Building in workspace /root/.jenkins/workspace/kakaops-job
The recommended git tool is: NONE
No credentials specified

/usr/local/git/bin/git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
/usr/local/git/bin/git config remote.origin.url https://github.com/bingyue/easy-springmvc-maven # timeout=10
Fetching upstream changes from https://github.com/bingyue/easy-springmvc-maven
/usr/local/git/bin/git --version # timeout=10
git --version # ‘git version 2.9.5’
/usr/local/git/bin/git fetch --tags --progress – https://github.com/bingyue/easy-springmvc-maven +refs/heads/:refs/remotes/origin/ # timeout=10
/usr/local/git/bin/git rev-parse refs/remotes/origin/master^{commit} # timeout=10
Checking out Revision 67604f7f9f30505e3bb3e8935c745154f04aa372 (refs/remotes/origin/master)
/usr/local/git/bin/git config core.sparsecheckout # timeout=10
/usr/local/git/bin/git checkout -f 67604f7f9f30505e3bb3e8935c745154f04aa372 # timeout=10
Commit message: “修改standard/1.1.2的依赖”
/usr/local/git/bin/git rev-list --no-walk 67604f7f9f30505e3bb3e8935c745154f04aa372 # timeout=10
Parsing POMs
Established TCP socket on 45997
[kakaops-job] $ /usr/local/jdk/bin/java -cp /root/.jenkins/plugins/maven-plugin/WEB-INF/lib/maven35-agent-1.13.jar:/usr/local/maven/boot/plexus-classworlds-2.5.2.jar:/usr/local/maven/conf/logging jenkins.maven3.agent.Maven35Main /usr/local/maven /usr/local/tomcat/webapps/jenkins/WEB-INF/lib/remoting-4.5.jar /root/.jenkins/plugins/maven-plugin/WEB-INF/lib/maven35-interceptor-1.13.jar /root/.jenkins/plugins/maven-plugin/WEB-INF/lib/maven3-interceptor-commons-1.13.jar 45997
<=[JENKINS REMOTING CAPACITY]=>channel started
Executing Maven: -B -f /root/.jenkins/workspace/kakaops-job/pom.xml clean package -Dmaven.test.skip=true
[INFO] Scanning for projects…
[WARNING]
[WARNING] Some problems were encountered while building the effective model for springmvc-maven:easy-springmvc-maven:war:0.0.1-SNAPSHOT
[WARNING] ‘build.plugins.plugin.version’ for org.apache.maven.plugins:maven-war-plugin is missing. @ line 22, column 15
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING]
[INFO]
[INFO] ----------------< springmvc-maven:easy-springmvc-maven >----------------
[INFO] Building springmvc-maven 0.0.1-SNAPSHOT
[INFO] --------------------------------[ war ]---------------------------------
[INFO]
[INFO] — maven-clean-plugin:2.5:clean (default-clean) @ easy-springmvc-maven —
[INFO] Deleting /root/.jenkins/workspace/kakaops-job/target
[INFO]
[INFO] — maven-resources-plugin:2.6:resources (default-resources) @ easy-springmvc-maven —
[INFO] Using ‘UTF-8’ encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /root/.jenkins/workspace/kakaops-job/src/main/resources
[INFO]
[INFO] — maven-compiler-plugin:3.1:compile (default-compile) @ easy-springmvc-maven —
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to /root/.jenkins/workspace/kakaops-job/target/classes
[INFO]
[INFO] — maven-resources-plugin:2.6:testResources (default-testResources) @ easy-springmvc-maven —
[INFO] Not copying test resources
[INFO]
[INFO] — maven-compiler-plugin:3.1:testCompile (default-testCompile) @ easy-springmvc-maven —
[INFO] Not compiling test sources
[INFO]
[INFO] — maven-surefire-plugin:2.12.4:test (default-test) @ easy-springmvc-maven —
[INFO] Tests are skipped.
[INFO]
[INFO] — maven-war-plugin:2.2:war (default-war) @ easy-springmvc-maven —
[INFO] Packaging webapp
[INFO] Assembling webapp [easy-springmvc-maven] in [/root/.jenkins/workspace/kakaops-job/target/easy-springmvc-maven]
[INFO] Processing war project
[INFO] Copying webapp resources [/root/.jenkins/workspace/kakaops-job/src/main/webapp]
[INFO] Webapp assembled in [122 msecs]
[INFO] Building war: /root/.jenkins/workspace/kakaops-job/target/easy-springmvc-maven.war
[INFO] WEB-INF/web.xml already added, skipping
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.713 s
[INFO] Finished at: 2020-10-31T18:06:26+08:00
[INFO] ------------------------------------------------------------------------
Waiting for Jenkins to finish collecting data
[JENKINS] Archiving /root/.jenkins/workspace/kakaops-job/pom.xml to springmvc-maven/easy-springmvc-maven/0.0.1-SNAPSHOT/easy-springmvc-maven-0.0.1-SNAPSHOT.pom
[JENKINS] Archiving /root/.jenkins/workspace/kakaops-job/target/easy-springmvc-maven.war to springmvc-maven/easy-springmvc-maven/0.0.1-SNAPSHOT/easy-springmvc-maven-0.0.1-SNAPSHOT.war
channel stopped
SSH: Connecting from host [jenkins-server]
SSH: Connecting with configuration [tomcat] …
SSH: EXEC: completed after 215 ms
SSH: Disconnecting configuration [tomcat] …
SSH: Transferred 1 file(s)
Finished: SUCCESS

十、排错

问题1:jenkins访问一直处于等待状态

在这里插入图片描述
tomcat日志显示如下信息:

[root@jenkins logs]# tail -f /usr/local/tomcat/logs/catalina.out
WARNING [Handling GET /jenkins/login from 10.0.0.174 : http-nio-8080-exec-3 HudsonIsLoading/index.jelly] org.apache.catalina.webresources.Cache.getResource Unable to add the resource at [/WEB-INF/classes/lib/layout/breadcrumbs.jelly] to the cache for web application [/jenkins] because there was insufficient free space available after evicting expired cache entries - consider increasing the maximum size of the cache

只要在$CATALINA_BASE/conf/context.xml里增加资源最大可缓存的大小就行了,大小可按自己的需要定义
# vim /usr/local/tomcat/conf/context.xml

   <Context>

    <!-- Default set of monitored resources. If one of these changes, the    -->
    <!-- web application will be reloaded.                                   -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
    <Resources
        cachingAllowed="true"
        cacheMaxSize="100000"
    />
</Context>

最后重起tomcat,问题解决!

问题2:剩余内存必须大于2G

tomcat启动之前的内存:
在这里插入图片描述
tomcat启动之后的内存:
在这里插入图片描述

问题3:插件下载后继续下面初始化完成点开始的时候跳到一个空白页面

解决:点击地址栏左边的后退按钮即可进入正常页面

在这里插入图片描述
接着上面的错误,返回之后虽然进入正常界面,但是会有如下提示:
在这里插入图片描述
手动安装这些插件

问题4:脚本权限

在这里插入图片描述
尝试修改构建后脚本的权限

问题5:构建个人的github库时,缺失pom文件

可以用公共库中拷贝,传到自己的GitHub上。
在这里插入图片描述

  • 6
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Jenkins和Docker可以结合使用来实现CI/CD持续集成/持续交付)流程。下面是一种常见的实现方式: 1. 安装和配置Jenkins:首先,你需要在你的服务器或本地机器上安装和配置Jenkins。你可以按照Jenkins官方文档提供的步骤进行安装和配置。 2. 安装Docker:接下来,你需要安装Docker,并确保Docker服务正在运行。你可以根据你的操作系统在Docker官方网站上找到相应的安装说明。 3. 创建JenkinsCI/CD Pipeline:在Jenkins中,你可以创建一个Pipeline来定义你的CI/CD流程。Pipeline是一种将多个步骤组合在一起的方式,可以通过代码进行定义和版本控制。你可以使用Jenkins的Pipeline语法或者使用Jenkins插件来定义你的Pipeline。 4. 定义Jenkins Pipeline中的步骤:在你的Pipeline中,你可以定义多个步骤来完成CI/CD流程。以下是一个可能的步骤示例: - 从代码仓库拉取代码 - 构建Docker镜像 - 运行单元测试 - 部署到测试环境 - 运行集成测试 - 部署到生产环境 5. 使用Docker构建和管理镜像:在上述步骤中,使用Docker构建和管理镜像是关键。你可以使用Dockerfile来定义镜像的构建过程,并使用Jenkins Pipeline中的相关步骤来执行构建。 6. 集成其他工具:你可以通过Jenkins插件或其他方式集成其他工具,如代码质量检查工具、部署工具等,以实现更完整的CI/CD流程。 这只是一个简单的概述,实际的CI/CD流程可以根据你的项目需求和团队实践进行定制和扩展。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值