赞
踩
目录
简介
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具。主要做的事情就是从git中拉取代码,根据配置信息打包;把打好的包传输到目标服务器,并可以执行一些shell脚本,使项目打包发布一键完成。
jenkins的安装需要依赖于jdk。
1.新的服务器需要支持文件上传和下载,安装rz(上传)sz(下载)
yum install lrzsz -y
2.使用命令rz上传linux下的jdk安装包到服务器,输入rz后会弹出一个选项框,选择对应的jdk安装包(最新版的jenkins需要jdk11以上),2022年7月2日起,jenkins新版本不再支持java8,仅支持java11和java17。
3.解压jdk安装包文件
tar -zxvf jdk*.tar.gz
4.到/usr/local目录下创建存放jkd的目录java:
- cd /usr/local
-
- mkdir java
5.目录切到/usr/local/java下,把jdk的解压文件添加到此目录下
- cd /usr/local/java
-
- mv /home/zhanglizeng/jdk-11/ .
6.在环境变量中配置jdk
打开配置文件:
vi /etc/profile
输入字符i开始进行编辑
向配置文件中添加jdk的安装目录:
- export JAVA_HOME=/usr/local/java/jdk-11
- export PATH=$JAVA_HOME/bin:$PATH
- export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
按esc退出编辑
输入:再输入wq(保存并退出),若是输入q!则退出不保存
7.让配置生效:
source /etc/profile
8.检验jdk是否安装成功:
java -version
1.输入命令安装jenkins
- sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo --no-check-certificate
-
- sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
-
- yum install jenkins
2.配置jenkins端口
vim /etc/sysconfig/jenkins
- #监听端口
- JENKINS_PORT="8080"
3.配置权限,修改为root
vim /etc/sysconfig/jenkins
- #修改配置
- JENKINS_USER="root"
修改目录权限
- chown -R root:root /var/lib/jenkins
-
- chown -R root:root /var/cache/jenkins
-
- chown -R root:root /var/log/jenkins
编辑jenkins的配置文件:
vim /etc/init.d/jenkins
添加jdk的安装目录:
4.重启jenkins:
老版本的jenkins(jdk1.8及之前):
- #重启jenkins
- systemctl restart jenkins
- #启动jenkins
- systemctl start jenkins
- #查看jenkins状态
- systemctl status jenkins.service
新版本的jenkins(jdk大于等于11):
先切到 Jenkins 脚本目录
cd /etc/init.d
再执行命令
- #重启jenkins
- ./jenkins restart
- #启动jenkins
- ./jenkins start
- #查看jenkins状态
- ./jenkins status
若是装的最新版的jenkins,而启动命令还是使用原来的方式,则会报启动失败
查看启动状态为失败,报的错误是:Failed to start Jenkins Continuous Integration Server
5.启动jenkins
老版本的jenkins(jdk1.8及之前):
service jenkins start
新版本的jenkins(jdk大于等于11):
先切到 Jenkins 脚本目录
cd /etc/init.d
./jenkins start
此时执行启动jenkins命令,还是显示启动失败,jdk还是引用的1.8,默认的加载usr/lib/jvm下的jdk
此时我们需要在usr/lib/jvm下安装对应的jkd11
yum install java-11-openjdk* -y
安装完成后需要改变下jdk的选中版本
alternatives --config java
列出可选的jdk版本,输入jdk11对应的序号即可
此时再启动jenkins成功
6.查看是否开启防火墙
systemctl status firewalld
若是为dead,则没有开启防火墙,需要开启防火墙:
systemctl start firewalld
再查看防火墙:
查看是否开放端口8080:
firewall-cmd --list-ports
没有开放,则加入
firewall-cmd --permanent --zone=public --add-port=8080/tcp
重启防火墙
systemctl reload firewalld
再次查看是否开放
7.访问jenkins服务
查看linux的ip地址:
ifconfig -a
访问jenkins地址 http:<ip或者域名>:8080
执行命令查看密码:
cat /var/lib/jenkins/secrets/initialAdminPassword
复制密码输入到管理员密码,登录系统,插件安装选择推荐插件
安装进行中
插件安装完成以后将会创建管理员账户
安装完成
运行截图:
8.设置jenkins控制台中文显示
Manage Jenkins->Manage Plugins安装插件
安装插件 Locale plugin , Localization: Chinese (Simplified) , 如果失败就再安装一次,在可选插件中搜索,勾选,然后点击Install without restart,下面截图为已经安装好的状态
Manage Jeknins-》configure System设置显示语言,找到Locale设置为zh_CN,点击运用保存
重启Jenkins,浏览器中输入(http://域名/restart)http://192.168.153.130:8080/restart即可生效。
如果出现部分翻译,部分没翻译的现象,则删除插件。重启Jenkins(http://域名/restart),再次安装插件(第一次安装只有部分翻译了)
如果安装新的插件,重启了服务,又变成部分汉化了:
①将语言设定为zh_US,Jenkins切换为英文。
②调用restart重启Jenkins:http://域名/restart。
③再次语言设定为zh_CN,刷新即可,此次不能再重启
1.执行安装命令:
yum install git
2.查看安装git是否成功:
git --version
1.上传maven安装包到linux服务器:rz
2.解压文件:
tar -zxvf apache-maven-3.6.3-bin.tar.gz
3.切到安装maven的目录:
cd /usr/local
创建目录maven:
mkdir maven
进入到maven目录:
cd maven
把解压的maven包移动到此目录下:
mv /home/zhanglizeng/apache-maven-3.6.3/ .
4.修改maven的setting.xml配置信息
进入目录:
cd /usr/local/maven/apache-maven-3.6.3/conf
编辑setting.xml配置文件:
vi settings.xml
①设置存放jar包的目录:
②配置私服的serviers
- <servers>
- <server>
- <id>umapp-rs</id>
- <username>Nexus umapp</username>
- <password>`Qihoo360!</password>
- </server>
- </servers>
③配置阿里云镜像
- <mirrors>
- <mirror>
- <id>alimaven</id>
- <name>aliyun maven</name>
- <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
- <mirrorOf>central</mirrorOf>
- </mirror>
- </mirrors>
④配置maven私服nexus及激活的配置
- <profiles>
- <profile>
- <id>umapp</id>
- <repositories>
- <repository>
- <id>umapp-rs</id>
- <name>Nexus umapp</name>
- <url>http://xxx:port/nexus/content/repositories/umapp/</url>
- </repository>
- </repositories>
- </profile>
- </profiles>
- <activeProfiles>
- <!--make the profile active all the time -->
- <activeProfile>umapp</activeProfile>
- </activeProfiles>
5.创建存放jar包的目录repo,需要与setting.xml中配置的一致:
切到需要创建的目录下:
cd /usr/local/maven
创建目录:
mkdir repo
给目录赋读写权限:
chmod 777 repo
6.把maven安装信息配置进环境变量中
编辑环境变量:
vi /etc/profile
把maven信息加进去保存并退出(wq):
- export M2_HOME=/usr/local/maven/apache-maven-3.6.3
- export PATH=$M2_HOME/bin:$PATH
7.重新加载环境变量:
source /etc/profile
8.查看maven是否安装成功:
mvn -v
在jenkins首页依次进入系统管理>>全局工具配置:
1.jdk配置:输入jdk安装的目录
2.git配置:输入git的目录
3.maven配置:输入maven的目录
jenkins打完包需要上传到新的服务器上,此处使用ssh的方式上传,添加ssh插件。系统管理-》插件管理-》可选插件
所需插件如下:如果已经安装,无需再次安装SSH 、Maven Integration 、Git plugin、Publish Over SSH,Role-based 。
安装完成后新建工程时,构建环境选项才会出现SSH相关的选项
附加:截止到发稿前,新版本的jenkins不提供Publish Over SSH插件,从可选库里面检索不到,jenkins官网暂停了插件,原因是存在XSS和CSRF攻击,目前没有修复,但是我们使用内网部署,不存在这种情况,外网部署的情况需要慎重考虑。
可以手动添加Publish Over SSH插件到jenkins,需要的文件下载git地址:
https://github.com/zhangliqingyun/publishssh.git
目录切到:
/var/lib/jenkins/plugins
把这两个文件添加进行,解压赋值上对应的权限
添加完成后即可在已安装插件中显示,创建项目的时候可以直接使用,在配置ssh服务器的位置也显示
点击系统管理-》系统配置,系统设置主要定义,Jenkins本身的一些配置,邮件、远程服务器管理、构建参数等,这里先配置远程主机,后面自动发布时会用到,找到Publish over SSH相关部分。
1.Jenkins SSH Key配置jenkins部署所在服务器的信息
Passphrase:SSH的密码,使用用户名/密码登录时为用户名的密码,使用私钥登录时为私钥的密码,没有就留空
Path to key:SSH私钥的文件路径
Key:私钥
①在安装jenkins的服务器上执行命令生成私钥信息
ssh-keygen -t rsa
全部按回车执行不需要输入密码,执行完或会在目录/root/.ssh下生成私钥信息
②Passphrase内输入登录服务器的密码
③Path to key内输入私钥的文件地址:
/root/.ssh/id_rsa
④Key为id_rsa的文本内容,可以使用命令:sz id_rsa把文件下载下来,把文本内容粘贴进行
2.SSH Servers配置需要把打好的jar包上传到的服务器信息(发布业务系统的服务器)
点击新增添加ssh服务器,可以根据需要添加多台。
Name:SSH节点配置的名称,在Job中使用Publish over SSH插件时,此名称将出现在"SSH Server"中"Name"的下拉列表中。
Hostname: 主机IP
Username:主机用户名
Remote Derictory: 运程机器上真实存在的目录,并且"Username"指定的用户要有访问此目录的权限,插件将把文件传送到此目录下;
登录服务器创建目录:
mkdir u01
给u01目录赋权限:
chmod 775 u01
登录远程服务器使用秘密的方式,点击高级展开进行设置:
勾选使用秘密登录: Use password authentication, or use a different key,点击Change Password设置添加的用户登录服务器的密码
也可以不使用密码,免密登录的方式:把部署jenkins的rsa.pub文件拷贝到目标机器的authorized_keys下,到目标服务器下执行
vi authorized_keys
,把公钥内容粘贴进行,然后重启目标服务器的shh
systemctl restart sshd.service
点击Test Configuration按钮测试配置的服务器是否能正常链接:当出现Success表示链接正常
1.创建视图,把工程放在视图中进行管理
2.在创建的视图中添加任务
3.输入任务名称,选择构建一个maven项目,勾选添加到当前视图进行创建
4.General选择丢弃旧的构建,输入保持构建的最大个数
5.源码管理选择Git的方式,添加项目的git地址
点击添加访问git地址的用户名和密码信息,此用户需要有权限访问git链接:
填写对应的用户名密码即可:
指定需要打包的分支:
6.构建环境
选择:Send files or execute commands over SSH after the build runs 把打包好的jar文件发送后执行命令的方式
Name:目标主机名称,前面配置主机时有提到,在第七部分的第2点配置的,若是配置了多台,则此处为下拉选择。
Source files:需要传输的文件路径,jenkins默认打出来的jar包放在/var/lib/jenkins/workspace目录下,后面的目录umapp-cloud-service-todolist为创建任务的名称,此处只用填写项目打包后的结尾文件名即可,前缀默认会拼接
Remove prefix:移除文件前缀,当从jenkins服务器把jar文件通过ssh发送到目标服务器后,目标服务器存放jar的目录,需要去掉的前缀(源jenkins存放jar的目录为基础)
Remote directory:远程目录,此目录是基于前面第七部分的第2点配置ssh server时定义的目录(/u01)为根目录。按此配置,则目标服务器上需要存在/u01/builds的目录
7.build打出jar包
Root Pom:配置pom.xml的文件目录
Goals and options:配置maven执行的命令
-Pdev为激活dev配置,此处的配置对应项目properties或yml配置文件的active(激活配置)
--pl xxx-service/xxx-service-xx:只打包xxx-service/xxx-service-xx这个项目,因为xxx-service目录下可能存在多个项目
-am:表示同时处理选定模块所依赖的模块,此处xxx-service-xxx可能会依赖于其他模块,使用am(also-make)把依赖的一并打包进来
1.首先确保jar文件操作的目录/u01存在(若不存在可以执行创建命令mkdir u01),并且有权限(若没有权限可以执行命令:chmod 775 u01),在上面第七部分第1点已经介绍创建过此目录
2.在u01目录下创建存放jar包的目录builds:
mkdir builds
并且赋权限:
chmod 775 builds
builds的命名对应第八部分的第6点Remote directory内容
3.在u01下创建存放执行文件的目录scripts:
mkdir scripts
并且赋权限:
chmod 775 scripts
scripts的命名对应第八部分的第6点Exec command的部分内容
4.在自己的电脑创建一个名为:umapp-cloud-devops.sh的linux执行文件,编辑好后上传到/u01/scripts目录下,文件命名对应第八部分的第6点Exec command的部分内容。
可执行文件接收4个参数,提供start启动的方法,重启restart的方法,停止stop的方法,删除备份del_bak的方法,备份bak的方法
- #!/bin/bash
-
- # 操作名称
- optionName=$1
- # Jar项目名称
- appName=$2
- # 项目路径
- appDir=$3
- # 内存配置级别 0:256m 1:512m 2:1G 3:2G 4:4G
- MemConfLevel=$4
- # 创建项目目录
- appPath="/u01/project/umapp/$appDir"
- if [ ! -d "$appPath" ];
- then
- mkdir $appPath
- fi
-
- # 帮助说明
- function usage()
- {
- echo "Usage: sh /u01/scripts/umapp-cloud-devops.sh [-optionName] [appName] [appDir] [MemConfLevel]"
- echo "Example: sh /u01/scripts/umapp-cloud-devops.sh restart umapp-cloud-auth-1.0.0 auth 0"
- echo "where options include:"
- echo " start 启动app"
- echo " stop 停止app"
- echo " restart 重启app"
- echo " status 查看状态"
- }
-
- if [ "$optionName" == "--help" ];
- then
- usage;
- exit 1
- fi
-
- if [ "$optionName" == "" ];
- then
- echo -e "\033[0;31m 未输入操作名 \033[0m"
- exit 1
- fi
-
- if [ "$appName" == "" ];
- then
- echo -e "\033[0;31m 未输入应用名 \033[0m"
- exit 1
- fi
-
- if [ "$appDir" == "" ];
- then
- echo -e "\033[0;31m 未输入项目路径 \033[0m"
- exit 1
- fi
-
- if [ "$MemConfLevel" == "" ];
- then
- echo -e "\033[0;31m 未输入内存配置级别 \033[0m"
- exit 1
- fi
-
- # 统计运行应用数
- function getCount()
- {
- count=`ps -ef |grep java|grep "$appName.jar"|grep -v grep|wc -l`
- echo $count
- }
-
- # 获取pid
- function getPid()
- {
- pid=`ps -ef | grep "$appName.jar" | grep -v grep | awk '{print $2}'`
- echo $pid
- }
-
- # 启动应用
- function start()
- {
- source /etc/profile
- # 统计运行应用数
- count=`getCount`
- if [ $count != 0 ];then
- echo "$appName is running..."
- else
- echo "$appName is start..."
- # 拷贝并覆盖Jenkins生成在builds文件下的jar 到所属的项目路径下
- cp -rf /u01/builds/"$appName.jar" /u01/project/umapp/$appDir/
- chmod 775 -R /u01/project/umapp/$appDir
- cd /u01/project/umapp/$appDir
- echo "begin config..."
- if [ "$MemConfLevel" = 0 ];then
- XmsSize=256m
- MetaSize=125m
- elif [ "$MemConfLevel" = 1 ];then
- XmsSize=512m
- MetaSize=256m
- elif [ "$MemConfLevel" = 2 ];then
- XmsSize=1G
- MetaSize=512m
- elif [ "$MemConfLevel" = 3 ];then
- XmsSize=2G
- MetaSize=1G
- elif [ "$MemConfLevel" = 4 ];then
- XmsSize=4G
- MetaSize=2G
- fi
- JAVA_OPTS="-Xms${XmsSize} -Xmx${XmsSize} -XX:CompressedClassSpaceSize=${MetaSize} -XX:MetaspaceSize=${MetaSize} -XX:MaxMetaspaceSize=${MetaSize} -Xloggc:logs/gc.log"
- echo "before start..."
- nohup java -jar "$appName.jar" >$appName 2>&1 &
- echo "after start..."
- fi
- }
-
- # 停止应用
- function stop()
- {
- echo "stop $appName..."
- count=`getCount`
- if [ $count != 0 ];then
- pid=`getPid`
- echo "stop $appName kill pid $pid"
- kill $pid
- sleep 2
- count=`getCount`
- if [ $count != 0 ];then
- echo "stop $appName kill -9 pid $pid"
- kill -9 $pid
- fi
- fi
- }
-
- # 备份应用
- function bak()
- {
- echo "bak start..."
- bakPath="/u01/bak/umapp/$appDir"
- if [ ! -d "$bakPath" ];
- then
- mkdir $bakPath
- fi
- bakName="/u01/project/umapp/$appDir/${appName}.jar"
- if [ -f "$bakName" ];
- then
- mv -f $bakName $bakPath/${appName}_`date +%Y%m%d%H%M%S`.jar
- fi
-
- }
-
- # 删除过期的备份程序只保留最新3次的
- function del_bak
- {
- echo "del_bak start..."
- bak_DIR=/u01/bak/umapp/$appDir
- if [ -d $bak_DIR ]; then
- cd $bak_DIR
- bak_count=`ls -lthr | grep -v 'total' | grep "$appName" | wc -l`
- if (($bak_count > 3));then
- del_count=`expr $bak_count - 3`
- ls -thr | grep -v 'total' | grep "$appName"| head -$del_count | xargs rm -rf
- fi
- fi
- echo "del_bak success..."
- }
-
-
- # 重启应用
- function restart()
- {
- stop
- del_bak
- bak
- start
- status
- }
-
- # 打印启动状态
- function status()
- {
- count=`getCount`
- if [ $count != 0 ];then
- echo "$appName is success..."
- else
- echo "$appName is not success..."
- fi
- }
-
- case $1 in
- start)
- start;;
- stop)
- stop;;
- restart)
- restart;;
- status)
- status;;
- --help)
- usage;;
- *)
- echo -e "请使用--help察看可用选项" ;;
- esac
5.创建可执行文件需要的目录
①umapp-cloud-devops.sh文件有一个存放jar包启动文件的目录project,把jar从/u01/builds下移动到/u01/project/umapp下,所以在/u01下创建对应的目录:
mkdir project
并且赋权限:
chmod 775 project
chmod 775 project
进入到project:
cd project/
再创建umapp目录:
mkdir umapp
并且赋权限:
chmod 775 umapp
②umapp-cloud-devops.sh文件有一个从/u01/project/umapp备份jar包到/u01/bak/umapp的操作,所以在/u01下创建对应的目录:
mkdir bak
并且赋权限:
chmod 775 bak
进入到bak:
cd bak/
再创建umapp目录:
mkdir umapp
并且赋权限:
chmod 775 umapp
6.配置系统启动需要的日志文件目录
根据项目配置的日志目录在/u01目录下创建日志目录:
mkdir logs
并且赋权限:
chmod 775 logs
点击项目名称进入构建页面
点击立即构建
点击构建的序号查看构建情况
点击控制调输出查看构建情况
最后输出Finished: SUCCESS表示构建成功,从服务的注册中心nacos可以查看系统构建成功
前面第八、九、十是构建的java maven项目,此处构建的是纯前端项目。
1.添加前端打包需要的插件,系统管理-》插件管理,添加NodeJs Plugin。
2.配置node全局工具,系统管理-》全局工具配置,找到NodeJs相关配置,选择NodeJs版本。
注意NodeJs的版本选择,需要跟安装jenkins的服务器对应,太高的NodeJs版本,需要的Glibc版本比较高,否则打包的时候会报找不到高版本的Glibc。
/lib64/libm.so.6: version `GLIBC_2.27‘ not found
可以通过命令查看服务器Glibc的版本信息
strings /lib64/libc.so.6 |grep GLIBC
此处我们选择nodeJS-14.17.6。
3.创建一个任务,新建任务-》构建一个自由风格的软件项目
4.General选择丢弃旧的构建,输入保持构建的最大个数
5.源码管理选择Git的方式,添加项目的git地址
点击添加访问git地址的用户名和密码信息,此用户需要有权限访问git链接:
填写对应的用户名密码即可:
指定需要打包的分支:
6.构建环境选择Provide Node & npm bin/ folder to PATH,选择在全局配置中配置的nodejs
7.构建步骤选择执行shell(Execute shell)
配置bulid构建的脚本
- #查看环境path
- echo $PATH
- #打印node版本
- node -v
- #打印npm版本
- npm -v
- #安装镜像文件,镜像文件的地址具体根据前端使用的库进行配置
- npm install yarn --registry=http://registry.npm.xxx.org/
- #开始构建
- npm run build
- #进入构建完的dist目录
- cd dist
- #移除上次打的压缩包
- rm -rf dist.tar.gz
- #把dist目录下的文件全部打成压缩包
- tar -zcvf dist.tar.gz *
- cd ../
8.构建后操作,选择通过ssh传输到目标服务器:Send build artifacts over SSH
Name:目标主机名称,前面配置主机时有提到,在第七部分的第2点配置的,若是配置了多台,则此处为下拉选择。
Source files:需要传输的文件路径,jenkins默认打出来的jar包放在/var/lib/jenkins/workspace目录下,后面的目录test-doravis为创建任务的名称,此处只用填写项目打包后的结尾文件名即可,前缀默认会拼接
Remove prefix:移除文件前缀,当从jenkins服务器把tar.gz文件通过ssh发送到目标服务器后,目标服务器存放tar.gz的目录,需要去掉的前缀(源jenkins存放tar.gz的目录为基础)
Remote directory:远程目录,此目录是基于前面第七部分的第2点配置ssh server时定义的目录(/u01)为根目录。按此配置,则目标服务器上需要存在/u01/project的目录
Exec command:配置传输到目标服务器后执行的命令
- #进入存放tar.gz文件的目录
- cd /u01/project
- #移除存放前端文件的目录
- rm -rf webProject
- #创建存放前端文件的目录
- mkdir webProject
- #解压tar.gz文件,并放到上面创建的目录下
- tar -zxvf dist.tar.gz -C webProject
- #移除tar.gz文件
- rm -rf dist.tar.gz
9.保存配置,立即构建,构建成功后,在目标服务器存在此dist文件
10.若是要访问前端项目,只需在nginx中配置下反向代理即可访问前端页面。
1.添加用户,系统管理-》jenkins专有用户数据库-》新建用户,填写用户信息
2.添加角色分配插件,系统管理-》插件管理,添加Role-based Authorization Strategy插件
3.修改权限方式 ,系统管理-》全局安全配置,授权策略改为Role-Based Strategy
修改完成后,在系统管理才会出现Manage and Assign Roles
4.配置权限,系统管理-》Manage and Assign Roles,可以配置角色,给用户分配角色。
5.配置角色,系统管理-》Manage and Assign Roles-》Manage Roles
Global roles:最外层比较宏观的权限,全局角色,针对此角色配置操作某个菜单的权限
Item roles:针对任务进行的权限划分,使用正则标识式进行配置
此处全局角色,配置了一个view,只分配了一个read的权限;任务添加了一个web角色,使用正则表达式匹配任务名为web开头的任务。
6.给用户分配角色,系统管理-》Manage and Assign Roles-》Assign Roles
此处给用户张三、李四分配的view角色,登录进来后看不到删除、编辑、添加相关的菜单。
在item roles给张三、李四勾上可以操作的任务
此时用户张三、李四登录可以看到分配的任务,使用正则标识式匹配的任务列表
而我们系统中是有两个任务的,下面的图是管理员看到的效果。
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。