更新 'cloud/Jenkinsfile'

master
newrain001 9 months ago
parent eb5d10b762
commit 96e25f9249
  1. 358
      cloud/Jenkinsfile

358
cloud/Jenkinsfile vendored

@ -1,103 +1,295 @@
pipeline {
agent any
environment {
PATH = "/opt/maven3.8.8/bin:/opt/node/bin:${env.PATH}"
PROJECT_NAME = "ruoyi"
DOCKER_REPOSITORY_CREDENTIAL_ID = "7cc63152-c727-40fc-b177-d8397396f1ba"
HARBOR_HOST = "registry.cn-hangzhou.aliyuncs.com"
NAMESPACE_NAME = "newrain_wang"
JAVA_REPOSITORY_NAME = "ruoyi-java"
NODE_REPOSITORY_NAME = "rupyi-node"
JAVA_TAG = "v1.0"
NODE_TAG = "v1.0"
JAVA_REPLICAS = 4
NODE_REPLICAS = 2
YAML_PATH = "cloud/deploy/"
JAVA_DEPLOYMENT_NAME = "ruoyi-java.yaml"
NODE_DEPLOYMENT_NAME = "ruoyi-nginx.yaml"
STATUS_URL = "http://qf.jenkins.vip:30210/job/ruoyi/${BUILD_NUMBER}"
CONSOLE_URL = "http://qf.jenkins.vip:30210/job/ruoyi/${BUILD_NUMBER}/console"
}
agent {
kubernetes {
cloud "kubernetes"
yaml """
apiVersion: v1
kind: Pod
spec:
containers:
- name: jnlp
image: jenkins/inbound-agent:3107.v665000b_51092-15
args: ['\$(JENKINS_SECRET)', '\$(JENKINS_NAME)']
imagePullPolicy: IfNotPresent
volumeMounts:
- mountPath: "/etc/localtime"
name: "volume-2"
readOnly: false
- name: maven
image: maven:3.6.3-jdk-11
command: ['cat']
tty: true
volumeMount:
- mountPath: "/usr/share/maven/ref/"
name: "maven-repo"
subPath: "settings.xml"
readOnly: true
- name: nodejs
image: node:14
command: ['cat']
tty: true
- name: kubectl
image: kubesphere/kubectl:v1.22.0
imagePullPolicy: IfNotPresent
tty: true
command: ["cat"]
volumeMounts:
- mountPath: "/etc/localtime"
name: "volume-2"
readOnly: false
- mountPath: "/var/run/docker.sock"
name: "volume-docker"
readOnly: false
- mountPath: "/root/.kube"
subPath: config
name: "kubeconfig"
readOnly: false
- name: docker
image: docker:19.03.15-git
command: ['cat']
tty: true
volumeMounts:
- mountPath: "/var/run/docker.sock"
name: "volume-docker"
readOnly: false
volumes:
- name: volume-2
hostPath:
path: "/usr/share/zoneinfo/Asia/Shanghai"
- name: volume-docker
hostPath:
path: "/var/run/docker.sock"
- name: kubeconfig
secret:
secretName: kubeconfig
items:
- key: config
path: config
- name: maven-repo
configMap:
configMapName: maven-repo
items:
- key: settings.xml
path: settings.xml
"""
}
}
tools {
maven 'maven388'
}
stages {
stage('前端代码打包') {
stage('Maven 打包') {
steps {
sh "cd ruoyi-ui && npm install && npm run build:prod && cp -r dist ../cloud/ruoyi-nginx"
echo "前端代码打包完成"
container('maven') {
sh """
sh "mvn clean package -Dmaven.test.skip=true && cp ruoyi-admin/target/ruoyi-admin.jar cloud/ruoyi-java"
"""
}
}
post {
success {
// Maven 打包成功的钉钉消息配置
dingtalk (
robot: '4eabbd09-a21a-40a9-84db-6440c0daebec',
type: 'MARKDOWN',
title: '后端打包成功 ${PROJECT_NAME}',
text: [
'### 项目 ${PROJECT_NAME}',
'---',
'- 状态:<font color=#00FF00 >成功</font>',
'- 阶段:后端打包',
'- 版本:${BUILD_NUMBER}',
'- [查看部署详情](${STATUS_URL})',
'- [查看日志Console](${CONSOLE_URL})'
],
at: ['17694993496']
)
}
failure {
// Maven 打包失败的钉钉消息配置
dingtalk (
robot: '4eabbd09-a21a-40a9-84db-6440c0daebec',
type: 'MARKDOWN',
title: '后端打包失败 ${PROJECT_NAME}',
text: [
'### 项目 ${PROJECT_NAME}',
'---',
'- 状态:<font color=#FF0000 >失败</font>',
'- 阶段:后端打包',
'- 版本:${BUILD_NUMBER}',
'- [查看部署详情](${STATUS_URL})',
'- [查看日志Console](${CONSOLE_URL})'
],
at: ['17694993496']
)
}
}
}
stage('后端代码打包') {
stage('Node.js 打包') {
steps {
sh "mvn clean package -Dmaven.test.skip=true && cp ruoyi-admin/target/ruoyi-admin.jar cloud/ruoyi-java"
echo "后端代码打包完成"
container('nodejs') {
sh """
cd ruoyi-ui && npm install --registry http://registry.npmmirror.com && npm run build:prod && cp -r dist ../cloud/ruoyi-nginx
"""
}
}
post {
success {
// Node.js 打包成功的钉钉消息配置
dingtalk (
robot: '4eabbd09-a21a-40a9-84db-6440c0daebec',
type: 'MARKDOWN',
title: '前端打包成功 ${PROJECT_NAME}',
text: [
'### 项目 ${PROJECT_NAME}',
'---',
'- 状态:<font color=#00FF00 >成功</font>',
'- 阶段:前端打包',
'- 版本:${BUILD_NUMBER}',
'- [查看部署详情](${STATUS_URL})',
'- [查看日志Console](${CONSOLE_URL})'
],
at: ['17694993496']
)
}
failure {
// Node.js 打包失败的钉钉消息配置
dingtalk (
robot: '4eabbd09-a21a-40a9-84db-6440c0daebec',
type: 'MARKDOWN',
title: '前端打包失败 ${PROJECT_NAME}',
text: [
'### 项目 ${PROJECT_NAME}',
'---',
'- 状态:<font color=#FF0000 >失败</font>',
'- 阶段:前端打包',
'- 版本:${BUILD_NUMBER}',
'- [查看部署详情](${STATUS_URL})',
'- [查看日志Console](${CONSOLE_URL})'
],
at: ['17694993496']
)
}
}
}
stage('构建镜像') {
steps {
sh "docker build -t ${html_image_repo}:${tag} cloud/ruoyi-nginx"
echo "构建镜像完成"
sh "docker build -t ${java_image_repo}:${tag} cloud/ruoyi-java"
withCredentials([usernamePassword(credentialsId: env.DOCKER_REPOSITORY_CREDENTIAL_ID, passwordVariable: 'PASSWORD', usernameVariable: 'USERNAME')]) {
container('docker') {
sh """
docker build -t ${env.HARBOR_HOST}/${env.NAMESPACE_NAME}/${env.JAVA_REPOSITORY_NAME}:${env.JAVA_TAG} cloud/ruoyi-java
docker build -t ${env.HARBOR_HOST}/${env.NAMESPACE_NAME}/${env.NODE_REPOSITORY_NAME}:${env.NODE_TAG} cloud/ruoyi-nginx
docker login ${env.HARBOR_HOST} --username ${env.USERNAME} --password ${env.PASSWORD}
docker push ${env.HARBOR_HOST}/${env.NAMESPACE_NAME}/${env.JAVA_REPOSITORY_NAME}:${env.JAVA_TAG}
docker push ${env.HARBOR_HOST}/${env.NAMESPACE_NAME}/${env.NODE_REPOSITORY_NAME}:${env.NODE_TAG}
"""
}
}
}
}
stage('推送镜像') {
steps {
sh '''
docker push ${html_image_repo}:${tag}
docker push ${java_image_repo}:${tag}
'''
echo "镜像推送完成"
post {
success {
// 构建镜像成功的钉钉消息配置
dingtalk (
robot: '4eabbd09-a21a-40a9-84db-6440c0daebec',
type: 'MARKDOWN',
title: '镜像构建成功 ${PROJECT_NAME}',
text: [
'### 项目 ${PROJECT_NAME}',
'---',
'- 状态:<font color=#00FF00 >成功</font>',
'- 阶段:构建镜像',
'- 版本:${BUILD_NUMBER}',
'- [查看部署详情](${STATUS_URL})',
'- [查看日志Console](${CONSOLE_URL})'
],
at: ['17694993496']
)
}
failure {
// 构建镜像失败的钉钉消息配置
dingtalk (
robot: '4eabbd09-a21a-40a9-84db-6440c0daebec',
type: 'MARKDOWN',
title: '镜像构建失败 ${PROJECT_NAME}',
text: [
'### 项目 ${PROJECT_NAME}',
'---',
'- 状态:<font color=#FF0000 >失败</font>',
'- 阶段:构建镜像',
'- 版本:${BUILD_NUMBER}',
'- [查看部署详情](${STATUS_URL})',
'- [查看日志Console](${CONSOLE_URL})'
],
at: ['17694993496']
)
}
}
}
stage('运行') {
stage('部署到kubernetes') {
steps {
sh '''
kubectl apply -f ./cloud/deploy
'''
container('kubectl') {
sh """
sed -i "s/REPLICAS/${env.JAVA_REPLICAS}/;s/HARBOR_HOST/${env.HARBOR_HOST}/;s/NAMESPACE_NAME/${env.NAMESPACE_NAME}/;s/REPOSITORY_NAME/${env.JAVA_REPOSITORY_NAME}/;s/TAG/${env.JAVA_TAG}/" ${env.YAML_PATH}${env.JAVA_DEPLOYMENT_NAME}
sed -i "s/REPLICAS/${env.JAVA_REPLICAS}/;s/HARBOR_HOST/${env.HARBOR_HOST}/;s/NAMESPACE_NAME/${env.NAMESPACE_NAME}/;s/REPOSITORY_NAME/${env.NODE_REPOSITORY_NAME}/;s/TAG/${env.NODE_TAG}/" ${env.YAML_PATH}${env.NODE_DEPLOYMENT_NAME}
kubectl apply -f ${env.YAML_PATH}
"""
}
}
post {
success {
// 部署成功的钉钉消息配置
dingtalk (
robot: '4eabbd09-a21a-40a9-84db-6440c0daebec',
type: 'MARKDOWN',
title: 'k8s部署成功 ${PROJECT_NAME}',
text: [
'### 项目 ${PROJECT_NAME}',
'---',
'- 状态:<font color=#00FF00 >成功</font>',
'- 阶段:部署yaml',
'- 版本:${BUILD_NUMBER}',
'- [查看部署详情](${STATUS_URL})',
'- [查看日志Console](${CONSOLE_URL})'
],
at: ['17694993496']
)
}
failure {
// 部署失败的钉钉消息配置
dingtalk (
robot: '4eabbd09-a21a-40a9-84db-6440c0daebec',
type: 'MARKDOWN',
title: 'k8s部署失败 ${PROJECT_NAME}',
text: [
'### 项目 ${PROJECT_NAME}',
'---',
'- 状态:<font color=#FF0000 >失败</font>',
'- 阶段:部署yaml',
'- 版本:${BUILD_NUMBER}',
'- [查看部署详情](${STATUS_URL})',
'- [查看日志Console](${CONSOLE_URL})'
],
at: ['17694993496']
)
}
}
}
}
post {
always {
emailext (
subject: '项目 【$PROJECT_NAME】 第【$BUILD_NUMBER】次构建 - $BUILD_STATUS!',
body: '''
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
</head>
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"
offset="0">
<table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
<h3>本邮件由系统自动发出,请勿回复!</h3>
<tr>
<br/>
各位同事,大家好,以下为${PROJECT_NAME }项目构建信息</br>
<td><font color="#CC0000">构建结果 - ${BUILD_STATUS}</font></td>
</tr>
<tr>
<td><br />
<b><font color="#0B610B">构建信息</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>项目名称 : ${PROJECT_NAME}</li>
<li>构建编号 : 第${BUILD_NUMBER}次构建</li>
<li>触发原因: ${CAUSE}</li>
<li>构建状态: ${BUILD_STATUS}</li>
<li>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
<li>构建 Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li>
<li>工作目录 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
<li>项目 Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li>
</ul>
<h4><font color="#0B610B">最近提交</font></h4>
<ul>
<hr size="2" width="100%" />
${CHANGES_SINCE_LAST_SUCCESS, reverse=true, format="%c", changesFormat="<li>%d [%a] %m</li>"}
</ul>
详细提交: <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a><br/>
</td>
</tr>
</table>
</body>
</html>
''',
to: '1161733918@qq.com',
attachLog: true
)
}
}
}
Loading…
Cancel
Save