1.## 标题搭建主从配置
2.添加maven的settings.xml
3.后端Jenkinsfile
pipeline {
agent {
label '123.*.*.215'
}
environment {
DOCKER_NAME = "parkcloud-parking-prod"
DOCKER_TAG = "p"
}
stages {
stage('print environment') {
steps {
echo "Hello World!!"
echo "${BUILD_NUMBER}"
echo "${JOB_NAME}"
echo "${WORKSPACE}"
echo "${BUILD_ID}"
echo "${JOB_BASE_NAME}"
}
}
stage('pull git'){
steps {
checkout([$class: 'GitSCM',
branches: [[name: '*/dev']],
extensions: [],
userRemoteConfigs: [[credentialsId: 'gitlab-121.*.*.251',
url: 'http://121.*.*.251:8100/smart-parking/backend/parkcloud/parkcloud-parking.git']]
])
}
}
stage('maven build'){
steps{
//配置maven阿里云jing'xiang
withMaven(maven: 'maven3.8.2', mavenSettingsConfig: '471ee712-f57f-447d-9dea-c97884185c53') {
// build
sh 'mvn -U clean package -Dmaven.test.skip=true -Pprod'
}
}
}
stage('build images'){
steps{
sh '''docker build -t ${DOCKER_NAME}-${JOB_NAME}:${DOCKER_TAG}${BUILD_NUMBER} .
'''
}
}
stage('start docker'){
steps{
echo 'start image'
//删除容器
sh "docker rm -f ${DOCKER_NAME}||true"
//启动容器
sh '''
docker run -d --network zhibo --name ${DOCKER_NAME} -p 7005:7005 ${DOCKER_NAME}-${JOB_NAME}:${DOCKER_TAG}${BUILD_NUMBER}
'''
//只保留最近5个镜像
sh '''
docker images | grep ${JOB_NAME}|awk 'NR>5{print $3}'| xargs docker rmi &>/dev/null || true
'''
}
}
}
post {
always {
//清理工作目录
deleteDir()
}
}
}
4.Dockerfile 文件
FROM anapsix/alpine-java:8_server-jre_unlimited
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
WORKDIR /jeecg-boot
EXPOSE 7005
COPY boot-model/target/*.jar .
CMD ["java","-jar","boot-model-2.4.5.jar"]
5.前端vueJenkinsfile
pipeline {
agent none
parameters {
extendedChoice defaultValue: 'deploy',
description: '部署还是回滚',
descriptionPropertyValue: 'deploy(部署),rollback(始终回退到最近的上个版本)',
multiSelectDelimiter: ',',
name: 'mytype',
quoteValue: false,
saveJSONParameterToFile: false,
type: 'PT_RADIO',
value: 'deploy,rollback',
visibleItemCount: 2
extendedChoice description: '选择git仓库',
multiSelectDelimiter: ',',
name: 'mygit',
quoteValue: false,
saveJSONParameterToFile: false,
type: 'PT_RADIO',
value: 'http://121.*.*.251:8100/smart-parking/parkcloud/group_web.fronted.git,http://121.*.*.251:8100/smart-parking/parkcloud/parking_web.fronted.git',
visibleItemCount: 3
}
environment {
MYIMAGES = 'node:12.22.6-alpine3.13'
}
stages {
stage('打印环境变量') {
agent any
steps {
echo "${BUILD_NUMBER}"
echo "${JOB_NAME}"
echo "${WORKSPACE}"
echo "${BUILD_ID}"
echo "${params.mygit}"
echo "${params.mytype}"
}
}
stage('Test') {
agent {
docker {
image "${MYIMAGES}"
label '123.*.*.215'
args '-v /root/.npm:/root/.npm'
}
}
when {
expression { params.mytype == 'deploy'}
}
steps {
sh 'node --version'
sh 'hostname'
}
}
stage('pull git'){
agent {
docker {
image "${MYIMAGES}"
label '123.*.*.215'
args '-v /root/.npm:/root/.npm'
}
}
when {
expression { params.mytype == 'deploy'}
}
steps {
checkout([$class: 'GitSCM',
branches: [[name: '*/dev']],
extensions: [],
userRemoteConfigs: [[credentialsId: 'gitlab-121.*.*.251',
url: "${params.mygit}"]]
])
}
}
stage('build vue'){
agent {
docker {
image "${MYIMAGES}"
label '123.*.*.215'
args '-v /root/.npm:/root/.npm'
}
}
when {
expression { params.mytype == 'deploy'}
}
steps {
sh 'npm config set registry https://registry.npm.taobao.org'
sh 'npm config get registry'
sh 'npm install webpack -g'
sh 'npm install --save-dev mini-css-extract-plugin'
sh 'npm install'
sh 'npm run build'
}
}
stage ('部署'){
agent {
label '123.*.*.215'
}
when {
expression {
params.mytype == 'deploy'
}
}
steps{
sh 'hostname'
sh 'pwd'
echo "${WORKSPACE}"
sh "bash /root/deploy.sh ${params.mygit} ${params.mytype}"
sh '''
cd /data/app/Frontend/system
chmod +x autobuild.sh && bash autobuild.sh
'''
}
post {
always {
//清理工作目录
deleteDir()
}
}
}
stage ('回滚'){
agent {
label '123.*.*.215'
}
when {
expression { params.mytype == 'rollback'}
}
steps {
sh 'hostname'
sh 'pwd'
echo "${WORKSPACE}"
sh "bash /root/deploy.sh ${params.mygit} ${params.mytype}"
sh '''
cd /data/app/Frontend/system
chmod +x autobuild.sh && bash autobuild.sh
'''
}
}
}
}
配置图:
6,前端部署脚本
[root@ecs-d09a-0001 ~]# cat deploy.sh
#!/bin/bash
#**************************************************
#说明:风电项目部署脚本,适用于Jenkins主从,在从节点拷贝部署
#Author:xuanhi
#Date:2021-10-14
#QQ:*****@qq.com
#Description:本脚本可以扩展,扩展时在尾部case语句添加git仓库名即可,同时需设置4个变量,
# srcpath:指定jenkens从节点的工作目录。destpath:指定部署位置,如nginx的根目录。src_target:指定vue编译后的目录名。dest_target:指定部署时目录名
#***************************************************
set -e
#srcpath="/data/jenkins-work/workspace/zhibo-frontend"
#destpath="/data/app/Frontend/system"
repo=${1##*/}
mytype=$2
echo "仓库地址$repo"
#一个实现复制目录前备份一次,并且可以回退的功能copy
function copylogic(){
#回滚
if [ $mytype == "rollback" ];then
echo "开始回退,检查有无备份"
echo "要恢复的旧备份文件:$destpath/${dest_target}.bak"
if [ -d $destpath/${dest_target}.bak ];then
echo "有旧备份文件,开始回退!"
rm -rf $destpath/${dest_target}||true
sleep 2
mv $destpath/${dest_target}.bak $destpath/${dest_target}
echo "回退成功!!!"
else
echo "没有可以回退的文件"
fi
#部署
elif [ $mytype == "deploy" ];then
#检查目标地址有无文件目录,有就先备份
if [ -d $destpath/$dest_target ];then
#判断有无备份文件,有就删除旧备份
echo "旧备份文件:$destpath/${dest_target}.bak"
if [ -d $destpath/${dest_target}.bak ];then
echo "有旧备份文件"
rm -rf $destpath/${dest_target}.bak
echo "成功删除旧备份"
fi
mv $destpath/${dest_target} $destpath/${dest_target}.bak
echo "备份成功!!!"
cp -a $srcpath/$src_target $destpath/$dest_target
echo "部署成功!!!"
else
echo "没有文件直接拷贝"
cp -a $srcpath/$src_target $destpath/$dest_target
echo "部署成功!!!"
fi
else
echo "没有接收到部署类型mytype变量"
fi
}
case "${repo%.*}" in
"group_web.fronted")
echo "执行仓库块--${1%.*}"
#源文件路径
srcpath="/data/jenkins-work/workspace/zhibo-frontend"
#目标路径
destpath="/data/app/Frontend/system"
#编译后生成的静态目录
src_target="dist"
#将编译后静态目录最终部署名
dest_target="dist"
copylogic
;;
"parking_web.fronted")
echo "执行仓库块--${1%.*}"
#源文件路径
srcpath="/data/jenkins-work/workspace/zhibo-frontend"
#目标路径
destpath="/data/app/Frontend/system/dist"
#编译后生成的静态目录
src_target="parking"
#将编译后静态目录最终部署名
dest_target="parking"
copylogic
;;
*)
echo "没有匹配到要部署的仓库,请检查是否添加仓库部署"
;;
esac