Jenkins构建项目
一、新建一个自由风格项目
新建任务:tes-rollback
二、丢弃策略
三、配置参数化构建过程
3-1、添加选项参数
勾选 This project is parameterized -> 添加参数 -> Choice Parameter
3-2、添加字符参数
添加参数 -> 选择 String Prameter
按下图设置参数:
四、源码管理(git/svn)
五、配置构建步骤
5-1、maven打包配置
目标中填入打包命令:clean install -Dmaven.test.skip=true
5-2、执行shell配置(备份)
case $Status in
Deploy)
echo "Status:$Status"
path="${WORKSPACE}/backup/${BUILD_NUMBER}"
if [ -d $path ];
then
echo "The files is aready exists "
else
mkdir -p $path
fi
\cp -f ${WORKSPACE}/target/*.jar $path
echo "Completing"
;;
Rollback)
echo "Status:$Status"
echo "Version:$Version"
cd ${WORKSPACE}/backup/$Version
\cp -f *.jar $path ${WORKSPACE}/target
;;
*)
exit
esac
5-3、定期删除备份脚本
echo "删除过期备份"
ReservedNum=5 #保留文件数
FileDir=${WORKSPACE}/bak/
date=$(date "+%Y%m%d-%H%M%S")
cd $FileDir #进入备份目录
FileNum=$(ls -l | grep '^d' | wc -l) #当前有几个文件夹,即几个备份
while [[ $FileNum -gt $ReservedNum ]]
do
OldFile=$(ls -rt | head -1) #获取最旧的那个备份文件夹
echo $date "Delete File:"$OldFile
#rm -rf $FileDir/$OldFile
rm -rf $OldFile
let "FileNum--"
done
六、构建后操作
添加后建构操作: Send build artifacts over SSH使用方式
七、项目部署服务器脚本
7-1、编写脚本
在服务器目标上执行操作如下命令:
mkdir -p /root/Jenkins-in/
cd /root/Jenkins-in/
vi remit-channel.sh
脚本内容如下:
#!/bin/bash
DATE=$(date +%Y%m%d%H%M%S)
#export JAVA_HOME PATH CLASSPATH
#JAVA_HOME=/data/jdk1.8.0_261
#PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
#CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
DIR="/data/P4/p4-remit-channel"
JARFILE="p4-remit-channel-0.0.1-SNAPSHOT.jar"
if [ ! -d $DIR/backup ];then
mkdir -p $DIR/backup
fi
cd $DIR
PID=$(ps -ef | grep $JARFILE | grep -v grep | awk '{print $2}' | xargs)
if [ "$PID" ]
then
echo "正在kill进程"
kill -9 $PID
else
echo "没有进程需要kill"
fi
cp -f $JARFILE backup/$JARFILE$DATE
#mv -f /root/Jenkins-in/$JARFILE .
java -jar -Xms512m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m $JARFILE > out.log &
if [ $? = 0 ];then
sleep 30
tail -n 50 out.log
fi
cd backup/
ls -lt|awk 'NR>5{print $NF}'|xargs rm -rf
7-2、脚本可执行授权
chmod +x remit-channel.sh
7-3 前端VUE
打开“系统管理”--“管理插件” 搜索 nodejs 然后勾选安装
全局工具管理 > 新增Node JS
添加任务时, 设置构建环境,选择 Provide Node & npm bin/ folder to PATH 然后选择之前安装插件时候配置的node版本,如图
Git 拉取代码
安装环境,并编译打包
八、如何限制jenkins的任务在某个节点上执行
1、首先给节点打标签,一个节点可以打多个标签,中间使用空格分开
2、其次在每个任务上标记执行的标签位置,这样这个任务就在包含这些标签的节点上执行
九、ssh
Passphrase:如果自己在本地生成的ssh key没密码的话,这里不需要填写
Path to key:这里填写私钥的地址
key:这里填写私钥的内容(cat ~/.ssh/id_rsa查看)
Name:这里自己填写一个好记的名字
Hostname:主机ip或者域名
Username:登录机器的用户名
Remote Directory:远程的操作目录(这个需要自己的对应的服务器上创建好目录,并且登录名对应的用户需要有相应的权限)
*注意:这种利用私钥访问的办法需要事先将你的公钥放置到对应服务器的~/.ssh/authorized_keys中(一般 利用ssh-copy-id 命令免密登录)
[root@localhost ~]$ cat .ssh/id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
ssh-copy-id -i ~/.ssh/id_rsa.pub jenkins@172.16.0.184
可以看到密钥的首行,jenkins 2.2.77.2 版本在检验密钥时还不支持这种格式
[root@localhost ~]# ssh-keygen -m PEM -t rsa -b 4096
说明:
-m 参数指定密钥的格式,PEM是rsa之前使用的旧格式
-b 指定密钥长度。对于RSA密钥,最小要求768位,默认是2048位。
[root@localhost ~]# cat .ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIJKQIBAAKCAgEA+a6zjENnh90SVIWF4cf4AsbIaklPIu5f434xIsccjMNLqghR
[root@localhost ~]# scp /root/.ssh/id_rsa.pub root@172.29.186.194:/root
目标机器:
[root@localhost ~]# cat id_rsa.pub >> /root/.ssh/authorized_keys
对于普通用户authorized_keys的权限必须限定为600(go-rwx),否则普通用户无法实现无密钥访问,而ROOT用户按照默认即可实现无密钥访问
chmod go-rwx ~/.ssh/authorized_keys
这样改动后可以通过jenkins对密钥格式的验证
Jenkins添加节点
登录Jenkins管理界面 > 系统管理 > 节点管理
踩坑记录: 节点中配置的java路径为 Jenkins子节点运行目录,子节点服务器中 运行java项目或者maven 需要 另一个JDK ,目录必须和主节点 全局工具中配置的JDK路径相同
Jenkins 用户权限
插件管理 搜索下面插件 并下载
插件:Role-based Authorization Strategy
系统管理 > Manage and Assign Roles
参考: https://www.cnblogs.com/xiangsikai/p/12244867.html