144 lines
4.4 KiB
Groovy
144 lines
4.4 KiB
Groovy
def label = "slave-${UUID.randomUUID().toString()}"
|
|
|
|
podTemplate(
|
|
label: label,
|
|
yaml: """
|
|
apiVersion: v1
|
|
kind: Pod
|
|
metadata:
|
|
labels:
|
|
jenkins-cicd: cicd-jenkins
|
|
spec:
|
|
securityContext:
|
|
runAsUser: 0
|
|
privileged: true
|
|
containers:
|
|
- name: "docker"
|
|
image: "docker:20.10.17-git"
|
|
imagePullPolicy: "IfNotPresent"
|
|
command:
|
|
- cat
|
|
tty: true
|
|
volumeMounts:
|
|
- name: "volume-docker"
|
|
mountPath: "/var/run/docker.sock"
|
|
readOnly: false
|
|
- name: "workspace-volume"
|
|
mountPath: "/home/jenkins/agent"
|
|
readOnly: false
|
|
- name: kubectl
|
|
image: bitnami/kubectl:1.23.7
|
|
imagePullPolicy: "IfNotPresent"
|
|
command:
|
|
- cat
|
|
tty: true
|
|
securityContext:
|
|
allowPrivilegeEscalation: true
|
|
volumeMounts:
|
|
- name: "volume-kube"
|
|
mountPath: "/home/jenkins/.kube"
|
|
readOnly: false
|
|
- name: "workspace-volume"
|
|
mountPath: "/home/jenkins/agent"
|
|
readOnly: false
|
|
volumes:
|
|
- name: "volume-m2"
|
|
hostPath:
|
|
path: "/root/.m2/repository"
|
|
- name: "volume-docker"
|
|
hostPath:
|
|
path: "/var/run/docker.sock"
|
|
- name: "volume-kube"
|
|
hostPath:
|
|
path: "/root/.kube"
|
|
- name: "workspace-volume"
|
|
emptyDir:
|
|
medium: ""
|
|
""",
|
|
serviceAccount: 'jenkins-admin'
|
|
) {
|
|
node(label) {
|
|
def myRepo = checkout([
|
|
$class: 'GitSCM',
|
|
branches: [[name: "*/master"]],
|
|
doGenerateSubmoduleConfigurations: false,
|
|
extensions: [[$class: 'CloneOption', noTags: false, reference: '', shallow: true, timeout: 1000]]+[[$class: 'CheckoutOption', timeout: 1000]],
|
|
submoduleCfg: [],
|
|
userRemoteConfigs: [[
|
|
credentialsId: '2448e943-479f-4796-b5a0-fd3bf22a5d30',
|
|
url: 'https://gitee.com/guan-xiangwei/violin-home.git'
|
|
]]
|
|
])
|
|
|
|
def gitCommit = myRepo.GIT_COMMIT
|
|
def gitBranch = myRepo.GIT_BRANCH
|
|
|
|
def imageTag
|
|
def localDateTime
|
|
stage('obtain release tag') {
|
|
imageTag = sh returnStdout: true, script: "git tag --sort=-creatordate | head -n 1"
|
|
imageTag = imageTag.trim()
|
|
localDateTime = sh returnStdout: true, script: "echo `date +%s`"
|
|
localDateTime = localDateTime.trim()
|
|
}
|
|
|
|
def registryUrl = "ccr.ccs.tencentyun.com"
|
|
def imageEndpoint = "violin/violin-home"
|
|
def image = "${registryUrl}/${imageEndpoint}:${imageTag}"
|
|
|
|
stage('单元测试') {
|
|
echo "测试阶段"
|
|
}
|
|
stage('镜像构建') {
|
|
withCredentials([[$class: 'UsernamePasswordMultiBinding',
|
|
credentialsId: '8eb5126b-6a2f-4644-add0-bc2a669e663d',
|
|
usernameVariable: 'DOCKER_USER',
|
|
passwordVariable: 'DOCKER_PASSWORD']]) {
|
|
container('docker') {
|
|
echo "3. 构建 Docker 镜像阶段"
|
|
sh """
|
|
docker login ${registryUrl} --username=${DOCKER_USER} -p ${DOCKER_PASSWORD}
|
|
docker build -t ${image} .
|
|
docker push ${image}
|
|
"""
|
|
}
|
|
}
|
|
}
|
|
|
|
def violin_cicd_repo = checkout([
|
|
$class: 'GitSCM',
|
|
branches: [[name: "*/master"]],
|
|
doGenerateSubmoduleConfigurations: false,
|
|
extensions: [[$class: 'CloneOption', noTags: false, reference: '', shallow: true, timeout: 1000]]+[[$class: 'CheckoutOption', timeout: 1000]],
|
|
submoduleCfg: [],
|
|
userRemoteConfigs: [[
|
|
credentialsId: '2448e943-479f-4796-b5a0-fd3bf22a5d30',
|
|
url: 'https://gitee.com/guan-xiangwei/violin-cicd.git'
|
|
]]
|
|
])
|
|
|
|
stage('update k8s deployment') {
|
|
script{
|
|
wrap([$class: 'BuildUser']) {
|
|
withCredentials([usernamePassword(
|
|
credentialsId: '2448e943-479f-4796-b5a0-fd3bf22a5d30',
|
|
usernameVariable: 'GIT_USERNAME',
|
|
passwordVariable: 'GIT_PASSWORD'
|
|
)]) {
|
|
sh """
|
|
git config --global user.email "${env.BUILD_USER_EMAIL}"
|
|
git config --global user.name "${env.BUILD_USER_ID}"
|
|
git config --local credential.helper "!p() { echo username=\$GIT_USERNAME; echo password=\$GIT_PASSWORD;}; p"
|
|
|
|
"""
|
|
sh "sed -i -e s/tagUpdateTime:.*/tagUpdateTime:' '${localDateTime}/g ./prod/violin-home-deployment-prod.yaml"
|
|
sh "sed -i -e s/violin-home:.*/violin-home:${imageTag}/g ./prod/violin-home-deployment-prod.yaml"
|
|
sh "git add ./prod/violin-home-deployment-prod.yaml"
|
|
sh "git commit -m 'update tag ${imageTag}'"
|
|
sh "git push -u origin HEAD:master"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |