jenkins测试环境实战,前端vue后端java

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值