持续集成Jenkins环境搭建 2021-10-02

Java调优进阶总目录

持续集成Jenkins环境搭建

Jenkins基于Java开发,服务器必须是要有Java的运行环境!
自动化构建、测试、打包、发布:将本地开发环境基本移植到云端!
git、maven、wget、axel【多线程下载工具,下载快】、跨服务区异步文件同步rsync!tree。

一、 Jenkins环境搭建

Jenkins支持主从模式,这将会把构建任务分发到多个从节点去执行,这样就可以支撑起多个项目的大量 构建任务,提升构建效率。同时,你可以提供多种环境(如:开发环境、生产环境)来对同一个项目进行测试和构建。
Jenkins的部署方式主要有三种:这里采用第一种方式

  1. 服务器直接运行war
  2. 服务器通过 yum命令下载jenkins安装包进行安装运行
  3. docker容器运行

1.1 安装前置组件步骤

1. 切换管理员,安装组件及Java。
sudo -s
yum install -y git sshpass wget rsync tree
java -version
yum install java-1.8.0-openjdk-devel.x86_64 -y
echo $JAVA_HOME

# 配置JAVA_HOME环境变量
vim /etc/profile
source /etc/profile

配置JAVA_HOME环境变量,vim /etc/profile,最后加上,JAVA_HOME路径需确认。

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10- 1.el7_9.x86_64
export JRE_HOME=${JAVA_HOME}/jre 
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib 
export PATH=${JAVA_HOME}/bin:$PATH
2. 安装axel

axel多线程下载工具。 rpm卸载命令:rpm -e --nodeps 要卸载的软件包

# 下载 axel rpm包
wget http://download- ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/a/axel-2.4-9.el7.x86_64.rpm
# 安装axel
rpm -ivh axel-2.4-9.el7.x86_64.rpm
# 查看版本
axel --version
3. 安装maven
axel -n 20 https://archive.apache.org/dist/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.tar.gz tar zxvf apache-maven-3.6.1-bin.tar.gz mv apache-maven-3.6.1 /usr/local/

vim /etc/profile
source /etc/profile
# 测试maven安装是否成功
mvn -v
# 创建maven本地仓库目录
mkdir -p /data/maven_repository
# 如果用户没有当前目录权限,则给用户授权
chown -R hky-student:hky-student /data/maven_repository/
# 修改maven中仓库的位置
vim /usr/local/apache-maven-3.6.1/conf/settings.xml
export MAVEN_HOME=/usr/local/apache-maven-3.6.1
export PATH=${MAVEN_HOME}/bin:${PATH}

找到对应标签,将其中内容替换为新建的仓库位置。在其中添加如下内容

<localRepository>/data/maven_repository</localRepository>

<mirror>
	<id>aliyunmaven</id>
	<mirrorOf>*</mirrorOf> <name>阿里云公共仓库</name>
	<url>https://maven.aliyun.com/repository/public</url>
</mirror>

1.2 安装Jenkins软件

1. 下载jenkins安装包

jenkins.war 没有下载完成会出现该错误。 Error: Invalid or corrupt jarfile jenkins.war

axel -n 20 http://ftp-chi.osuosl.org/pub/jenkins/war/latest/jenkins.war

# 创建jenkins新的工作目录
mkdir -p /data/jenkins_data
2.在~下新建脚本:vim jenkins.sh
#!/bin/bash
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64
export JENKINS_SERVER_PATH=/root
export JENKINS_HOME=/data/jenkins_data

cd ${JENKINS_SERVER_PATH}
nohup java -jar jenkins.war --httpPort=80 >jenkins.log 2>&1 &
# 2>&1 日志格式化的方式 
# 在上面的例子中,0 – stdin (standard input),1 – stdout (standard output),2 – stderr (standard error) 
# 2>&1是将标准错误(2)重定向到标准输出(&1),标准输出(&1)再被重定向输入到jenkins.log文件中。

以上内容编辑后保存退出

3. 添加脚本执行权限,启动jenkins

这里使用sh 脚本启动Jenkins, 也可以直接使用 nohup java -jar jenkins.war 命令启动。

chmod +x jenkins.sh
# 启动jenkins
/root/jenkins.sh

# 修改jenkins配置(插件站点更新,加速联网)
vim /data/jenkins_data/hudson.model.UpdateCenter.xml

将XML内的url的值替换为:http://mirror.xmission.com/jenkins/updates/update-center.json

4. Jenkins开机自启动

在root用户下,设置开机执行:vim /etc/rc.d/rc.local,在最后添加如下启动命令
重启后。浏览器访问或者通过jps命令查看。

vim /etc/rc.d/rc.local
# 最后添加启动命令 /root/jenkins.sh
chmod +x /etc/rc.d/rc.local
# 重启机器
reboot

# 查看启动的相关Java程序
jps
# 查看程序进程 及其 端口号
netstat -anp
ps -e|grep java
# 杀死进程
kill pid
5. Jenkins 启动相关的问题记录
  1. 使用/root/jenkins.sh 无法启动, 直接使用命令nohup启动。端口在命令中。通过端口映射,实现外网的页面的访问。
nohup java -jar jenkins.war --httpPort=8080 > jenkins.log 2>&1

# 查看java相关程序是否运行
jps -l

1.3 、 测试Jenkins可用性

1 浏览器访问jenkins

提示输入密码,根据页面提示查看密码的方式获取密码并登录,一般用cat命令查看

cat /data/jenkins_data/secrets/initialAdminPassword

# 或者在日志中查看
tail -100f ./jenkins.log
2 创建pipeline方式的测试job

在高级项目选项中,配置流水线脚本。

	pipeline {
		agent any stages {
			stage('Hello') {
				steps {
					echo 'Hello World'
				}
			}
		}
	}

二、 Jenkins管理界面&&核心配置介绍

小结重点介绍核心配置:用户管理、角色管理、分组管理、插件管理、全局工具配置等。

1 角色管理

  • 之所以提到角色管理,是由于跟用户权限控制有关,在jenkins中控制用户权限需要选择安全策略,比如有:安全矩阵策略、项目矩阵策略、基于角色的策略等,而企业最常用的就是基于角色的策略,本文也是以角色管理为主。
  • 在Jenkins中角色管理分为两种:一种是全局角色,此角色与具体的job无关,是一种全局权限的控制,比如控制用户能不能查看job,能不能配置job;还有一种是项目角色,此角色与具体job有关,可以精细化控制到用户具体能拥有哪些job的哪些权限。

注意:如果想要配置角色管理,必须安装插件才行。
1、安装插件,插件名:Role-based Authorization Strategy

2 全局工具配置:JDK、Git、MVN

非pipeline的Java项目如果要构建成功,全局工具的环境需要配置好

  • 配置入口:Manage Jenkins->Global Tool Configuration
  • 配置方式:指定服务器上已经安装好的服务位置(不需要勾选自动安装)
  • 配置前提:服务器已经安装好jdk1.8、maven3.6.1、git1.8.3.1

三、 Jenkins原理分析-jenkins如何存储数据

本质:就是将本地的构建过程搬到云端:CI/CD。Jenkins核心操作,对应的数据两个部分;jobs存储了构建的相关信息。存储从代码仓库拉取下来的所有代码,workspace。

  • jobs --> 任务:日志、构建基本元数据【存放构建过程】
  • workspace --> 工作空间【存放代码】

在Jenkins中,所有的数据默认都以文件形式存储在$JENKINS_HOME【/data/jenkins_data】目录下。
占用空间最大的目录就是jobs目录和workspace目录。

  • jobs目录:项目在jenkins上的配置、构建日志、构建结果等所在目录
  • workspace目录:项目在jenkins上配置的源码仓库地址下载的源码所在目录,Java中maven的构建操作在此目录下进行。

四、Jenkins Job备份恢复

1 备份需求

  • 只备份重要的信息,保证恢复时除了构建历史,重要配置和job都在,排除掉build目录
  • 备份要周期性的执行,保证至少每天备份一次

2 备份实现

thin backup插件实现备份到备份服务器

2.1 插件设置备份内容

创建备份目标目录, 安装Thin Backup插件, 找到备份管理页面Manage Jenkins->ThinBackUp,进入后选择Settings进行配置。构建的最大备份文件个数为-1表示不限制,备份中排除了build的结果。

mkdir /data/jenkins_backup

配置信息:

# 配置好了每天21:00执行一次
H 21 * * *

# 特殊配置了备份时需要将凭证目录secrets下的所有文件进行备份,通过正则表达式
^(secrets|.*)$
2.2 rsync增量同步备份文件

使用rsync命令可以实现在每天jenkins完毕后,将当天新增的同步内容,增量同步到备份服务器上在master上切换到jenkins用户,执行rsync备份命令。

  • 特殊说明:执行sshpass命令前先在CI服务器上执行一次rsync命令(仅需一次即可),只有这次执行通过后,后续再执行sshpass带密码才可使用。后续再执行sshpass前都无需单独再执行rsync命令。
sshpass -p ****** rsync -avz /data/jenkins_backup/ [email protected]:/data/jenkins_backup/ 
sshpass -p ****** rsync -avz /data/jenkins_backup/ [email protected]:/root/jenkins_backup/
2.3 脚本自动执行同步【重要】

将rsync做成脚本自动执行,比如jenkins配置的是每天22:31执行同步,那么rsync可以在每天22:35再自动执行登录到部署机上,执行如下操作。

vim /root/backup_jenkins.sh
# 在脚本内填入如下内容
sshpass -p ****** rsync -avz /data/jenkins_backup/[email protected]:/root/jenkins_backup/

# 给脚本添加执行权限
chmod +x /root/backup_jenkins.sh

# 添加到系统crontab文件中,切换到root用户
vim /etc/crontab
# 添加内容
35 22 * * * root /bin/bash /root/backup_jenkins.sh &>/dev/null
# 保存完后,重启contab
systemctl restart crond.service

3. 恢复备份文件

  • 使用thinbackup插件,插件安装完毕后,重启jenkins ,然后登录找到hinBackup的配置,点击Settings,配置备份目录,然后恢复的时候就能从备份目录中,找到之前备份的那些文件了。
  • 选择要恢复的备份文件,选择最新的备份文件,点击开始恢复
  • 恢复过程页面是不会有恢复完成提示的,等待几分钟后,执行jenkins的重启链接即可

你可能感兴趣的:(Java,组件使用,jenkins,maven,java)