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
posted @ 2021-06-03 17:16  栋_RevoL  阅读(269)  评论(0编辑  收藏  举报