#!/usr/bin/env groovy
def git_auth = "77066368-e8a8-4edb-afaf-53aaf90c31a9"
def harbor_auth = "9c10572f-c324-422f-b0c0-1b80d2ddb857"
def kubectl_auth = "c26898c2-92c3-4c19-8490-9cf8ff7918ef"
pipeline {
agent {
kubernetes {
yaml '''
apiVersion: v1
kind: Pod
metadata:
name: jenkins-slave
namespace: jenkins
spec:
tolerations:
- key: "no-pod"
operator: "Exists"
effect: "NoSchedule"
nodeSelector:
jenkins: jenkins
containers:
- name: docker
#image: docker:24.0.6
image: ccr.ccs.tencentyun.com/huanghuanhui/docker:24.0.6
imagePullPolicy: IfNotPresent
readinessProbe:
exec:
command: [sh, -c, "ls -S /var/run/docker.sock"]
command:
- sleep
args:
- 99d
volumeMounts:
- name: docker-socket
mountPath: /var/run
- name: docker-daemon
#image: docker:24.0.6-dind
image: ccr.ccs.tencentyun.com/huanghuanhui/docker:24.0.6-dind
imagePullPolicy: IfNotPresent
securityContext:
privileged: true
volumeMounts:
- name: docker-socket
mountPath: /var/run
- name: maven
#image: maven:3.8.1-jdk-8
image: ccr.ccs.tencentyun.com/huanghuanhui/maven:3.8.1-jdk-8
imagePullPolicy: IfNotPresent
command:
- sleep
args:
- 99d
volumeMounts:
- name: maven-cache
mountPath: /root/.m2/repository
- name: kubectl
#image: kostiscodefresh/kubectl-argo-rollouts:v1.6.0
image: harbor.glroad.com:8800/kubectl/kubectl:v1
imagePullPolicy: IfNotPresent
command:
- sleep
args:
- 99d
volumes:
- name: docker-socket
emptyDir: {}
- name: maven-cache
persistentVolumeClaim:
claimName: jenkins-prod-slave-maven-cache
- name: node-cache
persistentVolumeClaim:
claimName: jenkins-prod-slave-node-cache
'''
}
}
environment {
AppName = "${AppName}"
GitRepo = "${GitRepo}"
GitBranch = "${GitBranch}"
HarborUrl = "${HarborUrl}"
Image = "${Image}"
JAVA_OPTS = "${JAVA_OPTS}"
}
stages {
stage('拉取代码') {
steps {
git branch: "${GitBranch}", credentialsId: "${git_auth}", url: "${GitRepo}"
}
}
stage('代码编译') {
steps {
container('maven') {
sh """
mvn -U clean install -Dmaven.test.skip=true
"""
}
}
}
stage('打包镜像') {
steps {
script {env.GIT_COMMIT_MSG = sh (script: 'git rev-parse --short HEAD', returnStdout: true).trim()}
container('docker') {
sh """
cd ruoyi-admin
echo 10.33.22.31 harbor.glroad.com >> /etc/hosts && ping -c 4 harbor.glroad.com
docker login harbor.glroad.com:8800 -uadmin -pGlroad2022
echo 888888888888888
docker build -t harbor.glroad.com:8800/test/${AppName}:${GitBranch}-${GIT_COMMIT_MSG}-${BUILD_ID} .
"""
}
}
}
stage('推送镜像') {
steps {
container('docker') {
withCredentials([usernamePassword(credentialsId: "${harbor_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {
sh """
docker pull harbor.glroad.com:8800/test/java:8
docker push harbor.glroad.com:8800/test/${AppName}:${GitBranch}-${GIT_COMMIT_MSG}-${BUILD_ID}
"""
}
}
}
}
stage('kubectl-滚动更新发布') {
steps {
container('kubectl') {
configFileProvider([configFile(fileId: "${kubectl_auth}", variable: 'kubeconfig')]) {
sh """
echo 999999999999999
mkdir -p ~/.kube && cp ${kubeconfig} ~/.kube/config
/app/kubectl-argo-rollouts-linux-amd64 set image ${AppName} "*=${HarborUrl}/ruoyi-cloud/${AppName}:${GitBranch}-${GIT_COMMIT_MSG}-${BUILD_ID}" -n ruoyi
"""
}
}
}
}
}
}