前言:上一篇文章整理了git的部署和使用,这章主要复习持续集成软件Jenkins,这个技术现在在云计算方面也是有应用的,同时也是越高级越智能的软件代表。
1)jenkins是什么
Jenkins是一个开源的、可扩展的持续集成、交付、部署(软件/代码的编译、打包、部署)的基于web界面的平台。允许持续集成和持续交付项目,无论用的是什么平台,可以处理任何类型的构建或持续集成。
2)为什么使用jenkins
Jenkins是一种使用Java编程语言编写的开源持续集成软件工具,用于实时测试和报告较大代码库中的孤立更改。 Jenkins软件使开发人员能够快速找到并解决代码库中的缺陷,并自动进行构建测试。
3)CI/CD是什么
CI(Continuous integration,中文意思是持续集成)是一种软件开发时间。持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。
CD(Continuous Delivery, 中文意思持续交付)是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的Staging环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境。
4)jenkins的优势是什么
Jenkins的优势包括:
在开发环境的早期阶段, 错误跟踪很容易。
提供大量的插件支持。
对代码的迭代改进。
构建失败会在集成阶段进行缓存。
对于每个代码提交更改, 都会生成一个自动生成报告通知。
为了将构建报告的成功或失败通知开发人员, 它与LDAP邮件服务器集成在一起。
实现持续集成的敏捷开发和测试驱动的开发。
通过简单的步骤, 即可自动完成maven发布项目。
5)实现持续集成/持续发布的产品的流程概述?
开发(git) -->git主库-->jenkins(git+jdk+tomcat+maven打包+测试)-->ssh-->发布到tomcat服务器
注:本文非特殊说明情况下操作均于192.168.189.150(Jenkins)上操作
角色 | IP |
---|---|
Git,模拟公司内部版本控制系统 | github代替 |
部署Jenkins | 192.168.189.150 |
模拟对外的业务服务器 | 192.168.189.151 |
可以配置一个centos7的源,感觉清华源比阿里源稳定一些
- [root@localhost yum.repos.d]# ls
- Centos_base.repo local.repo.bak
-
- [root@localhost yum.repos.d]# cat Centos_base.repo
- [tsinghua-centos7]
- name=CentOS-$releasever - Tsinghua
- baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.6.1810/os/$basearch/
- gpgcheck=1
- gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.6.1810/os/$basearch/RPM-GPG-KEY-CentOS-7
- enabled=1
-
-
- [root@localhost yum.repos.d]# rpm --import https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.6.1810/os/x86_64/RPM-GPG-KEY-CentOS-7
所需软件下载地址
jdk:Java 存档下载 — Java SE 8 | Oracle 中国
maven:Maven – Download Apache Maven
git:Index of /pub/software/scm/git/
tomcat:Apache Tomcat® - Welcome!
Jenkins:jenkins.war
- [root@localhost yum.repos.d]# yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker fontconfig
-
- #源码编译安装git
- [root@localhost ~]# ls
- anaconda-ks.cfg apache-maven-3.8.8-bin.tar.gz git-2.9.5.tar.gz jdk-11.0.16_linux-x64_bin.tar.gz
- [root@localhost ~]# tar xf git-2.9.5.tar.gz
- [root@localhost ~]# ls
- anaconda-ks.cfg git-2.9.5 jdk-11.0.16_linux-x64_bin.tar.gz
- apache-maven-3.8.8-bin.tar.gz git-2.9.5.tar.gz
- [root@localhost ~]# cd git-2.9.5
-
- [root@localhost git-2.9.5]# make prefix=/usr/local/git all
- #all是开启git所有功能,类似安装前勾选
- [root@localhost git-2.9.5]# make prefix=/usr/local/git install
- #安装
-
-
- [root@localhost git-2.9.5]# vim /etc/profile.d/jenkins_tools.sh
- [root@localhost git-2.9.5]# cat /etc/profile.d/jenkins_tools.sh
- PATH=$PATH:$HOME/bin:/usr/local/git/bin
-
- #写这里是为了一会cat方便看,平时直接写到profile即可
-
- [root@localhost git-2.9.5]# source /etc/profile.d/jenkins_tools.sh
- [root@localhost git-2.9.5]# git --version
- git version 1.8.3.1
-
- #注意此处git版本与下载版本并不相同,是因为一部分镜像即使最小化安装也会预装git
-
- [root@localhost git-2.9.5]# yum list | grep git.x86
- #找到1.8.3的全称
- [root@localhost git-2.9.5]# yum remove git.x86_64
- [root@localhost git-2.9.5]# source /etc/profile.d/jenkins_tools.sh
- [root@localhost git-2.9.5]# git --version
- git version 2.9.5
- #版本恢复正常
-
注:
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。
/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
- [root@localhost ~]# tar xf jdk-11.0.16_linux-x64_bin.tar.gz
- [root@localhost ~]# tar xf apache-tomcat-9.0.79.tar.gz
- [root@localhost ~]# ls
- anaconda-ks.cfg apache-tomcat-9.0.79.tar.gz jdk-11.0.16
- apache-maven-3.8.8-bin.tar.gz git-2.9.5 jdk-11.0.16_linux-x64_bin.tar.gz
- apache-tomcat-9.0.79 git-2.9.5.tar.gz
-
- [root@localhost ~]# mv jdk-11.0.16 /usr/local/java
- [root@localhost ~]# mv apache-tomcat-9.0.79 /usr/local/tomcat
-
- [root@localhost ~]# vim /etc/profile.d/java.sh
- [root@localhost ~]# cat /etc/profile.d/java.sh
- TOMCAT_HOME=/usr/local/tomcat
- JAVA_HOME=/usr/local/java
- PATH=$TOMCAT_HOME/bin:$JAVA_HOME/bin:$PATH
- export TOMCAT_HOME JAVA_HOME PATH
- [root@localhost ~]# source /etc/profile.d/java.sh
-
- [root@localhost ~]# java -version
- java version "11.0.16" 2022-07-19 LTS
- Java(TM) SE Runtime Environment 18.9 (build 11.0.16+11-LTS-199)
- Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.16+11-LTS-199, mixed mode)
-
-
-
-
- [root@localhost ~]# ls
- anaconda-ks.cfg apache-maven-3.8.8-bin.tar.gz jdk-11.0.16_linux-x64_bin.tar.gz
- [root@localhost ~]# tar -zxvf apache-maven-3.8.8-bin.tar.gz -C /usr/local/
- [root@localhost ~]# mv /usr/local/apache-maven-3.8.8/ /usr/local/maven
-
- [root@localhost ~]# vim /etc/profile.d/jenkins_tools.sh
- [root@localhost ~]# cat /etc/profile.d/jenkins_tools.sh
- PATH=$PATH:$HOME/bin:/usr/local/git/bin
-
- export M2_HOME=/usr/local/maven
- export M2=$M2_HOME/bin
- PATH=$M2:$PATH:$HOME/bin:/usr/local/git/bin
- export MAVEN_HOME=/usr/local/maven
- export PATH=${MAVEN_HOME}/bin:$PATH
-
- [root@localhost ~]# mvn --version
- Apache Maven 3.8.8 (4c87b05d9aedce574290d1acc98575ed5eb6cd39)
- Maven home: /usr/local/maven
- Java version: 11.0.16, vendor: Oracle Corporation, runtime: /usr/local/java
- Default locale: zh_CN, platform encoding: UTF-8
- OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"
- [root@localhost ~]# ls
- anaconda-ks.cfg git-2.9.5 jenkins.war
- apache-maven-3.8.8-bin.tar.gz git-2.9.5.tar.gz
- apache-tomcat-9.0.79.tar.gz jdk-11.0.16_linux-x64_bin.tar.gz
- [root@localhost ~]# rm -rf /usr/local/tomcat/webapps/*
- [root@localhost ~]# cp jenkins.war /usr/local/tomcat/webapps/
- [root@localhost ~]# /usr/local/tomcat/bin/startup.sh
- Using CATALINA_BASE: /usr/local/tomcat
- Using CATALINA_HOME: /usr/local/tomcat
- Using CATALINA_TMPDIR: /usr/local/tomcat/temp
- Using JRE_HOME: /usr/local/java
- Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
- Using CATALINA_OPTS:
- Tomcat started.
使用浏览器访问如下
按照提示输入密钥,点击继续
选择“安装推荐的插件”等待插件安装
注:这个位置可能会出现部分模块安装失败(红色),重试也会失败,这是因为和插件中心网络连接的问题,这里可以修改下插件中心,改为国内地址,插件安装位置/root/.jenkins/plugins/,安装失败可以通过外部下载后上传到此文件夹,实现插件安装,建议成功安装一次后将该文件夹下文件打包保存,以后部署直接使用。部分模块安装失败不影响进程推进,但会影响后期测试,此时排查难度已经接近无限大了。
- vim ~/.jenkins/hudson.model.UpdateCenter.xml
- #将url项替换如下
- http://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
-
-
- vim ~/.jenkins/updates/default.json
- #此处替换命令如下
- :% s/www.google.com/www.baidu.com/g
- :% s/updates.jenkins.io\/download/mirrors.tuna.tsinghua.edu.cn\/jenkins/g
安装完成
创建账号继续
点击保存并完成,完成安装
下拉找到系统管理
勾选环境变量然后新增
保存后自动回到主页
配置150与151ssh免密
- [root@localhost ~]# ssh-keygen
-
- [root@localhost ~]# ssh-copy-id -i 192.168.189.151
-
- [root@localhost ~]# ssh root@192.168.189.151
- Last login: Sat Jun 8 22:08:14 2024 from 192.168.189.1
- [root@localhost ~]# ip a | grep 192.168.189.15
- inet 192.168.189.151/24 brd 192.168.189.255 scope global noprefixroute ens33
- [root@localhost ~]# exit
- 登出
- Connection to 192.168.189.151 closed.
- [root@localhost ~]#
取出刚刚生成的密钥,按下图配置,测试成功后保存弹出
通过插件管理中心可以直观地看到这里有可更新、可选未安装插件、已安装插件;可以通过过滤快速查找
安装插件
修改前
修改后
修改内容如下(修改为阿里源)
-
- <id>central
-
central -
aliyun maven -
https://maven.aliyun.com/repository/public -
这里使用公共的互联网仓库gitee代替公司内部后端开发仓库(如果是私有仓库,这里需要建立credentials身份认证)
手动添加手动添加Goals and options:clean package -Dmaven.test.skip=true
在构建后设置中 选择:(send build artifacts over ssh)通过SSH发送构建工作
配置完保存自动弹出
source file的路径解释:构建之后,在jenkins服务器上是可以自动看到war包的。(该路径不需要创建)
# ls /root/.jenkins/jobs/testjob1/builds/target/*.war
这里需要到被推送服务器上提前部署路径,下方代码框内操作在151上完成
- [root@localhost ~]# mkdir -p /jenkins/war
- [root@localhost ~]# mkdir -p /jenkins/sh
- [root@localhost ~]# vim /jenkins/sh/deploy.sh
- [root@localhost ~]# cat /jenkins/sh/deploy.sh
- echo "FINISH build job" > /tmp/finish.sh
- [root@localhost ~]# ls /tmp/
- hsperfdata_root
- ks-script-PSPgvR
- systemd-private-5b02e3efb14a4000adb47697e94b3a70-chronyd.service-S01q6J
- vmware-root_8724-2832207218
- vmware-root_8730-2865761147
- vmware-root_8750-2824015062
- yum.log
- [root@localhost ~]# chmod +x /jenkins/sh/deploy.sh
点击进度条的时间戳,进入 任务记录页面
此处如果失败可回头检查控制台信息和前面所有设置
此处检查在151(tomcat服务器)上执行
- [root@localhost ~]# ls /jenkins/war/
- easy-springmvc-maven.war
-
- #gitee上代码已经全部拉下
-
-
-
- [root@localhost ~]# cat /tmp/finish.sh
- FINISH build job
-
- #预设脚本已经执行
1)重启Jenkins
http://ip:8080/jenkins/restart
2)“编码问题”错误,在Tomcat–>conf–>server.xml文件中修改即可
- [root@localhost ~]# vim /usr/local/tomcat/conf/server.xml
- "1.0" encoding="UTF-8"?>
3)构建个人的github库时,缺失pom文件
可以用其他公共库的pom文件拷贝
后记:Jenkins这个主要用于公司内部运维环境,重点放在与开发协调上。