Commit 283d76ed authored by 朱劲松​'s avatar 朱劲松​

reformat

parent 8e93d849
*.class
# Package Files #
*.jar
*.war
*.ear
build/*
target/*
**/build/*
**/target/*
out/*
**/out/*
**/.idea/workspace.xml
**/.idea/tasks.xml
idea/*
### Intellij ###
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm
*.iml
.idea/**
## File-based project format:
*.ipr
*.iws
### 建议使用本地gradle,服务器环境中也需要安装gradle
**/.gradle/*
**/gradle/*
gradlew*
**/target/**
**/._.DS_Store
**/*.bak
**/*.log
!/lib/*.jar
// src/org/qg/ansible/Utils.groovy // src/org/qg/ansible/Utils.groovy
package org.qg.ansible; package org.qg.ansible
import java.util.ArrayList;
import java.util.List; import java.util.ArrayList
def partition(array, size) { def partition(array, size) {
def partitions = [] def partitions = []
int partitionCount = array.size() / size int partitionCount = array.size() / size
partitionCount.times { partitionNumber -> partitionCount.times { partitionNumber ->
def start = partitionNumber * size def start = partitionNumber * size
def end = start + size - 1 def end = start + size - 1
partitions << array[start..end] partitions << array[start..end]
} }
if (array.size() % size) partitions << array[partitionCount * size..-1] if (array.size() % size) partitions << array[partitionCount * size..-1]
return partitions return partitions
} }
def partList(al, fromIndex, size) { def partList(al, fromIndex, size) {
print "Original ArrayList Content: "+al print "Original ArrayList Content: " + al
partOne = new ArrayList<String>(al.subList(0, fromIndex)) partOne = new ArrayList<String>(al.subList(0, fromIndex))
print "SubList stored in partOne: "+partOne print "SubList stored in partOne: " + partOne
partTwo = new ArrayList<String>(al.subList(fromIndex, size)) partTwo = new ArrayList<String>(al.subList(fromIndex, size))
print "SubList stored in partTwo: "+partTwo print "SubList stored in partTwo: " + partTwo
return [partOne, partTwo] return [partOne, partTwo]
} }
\ No newline at end of file
// src/org/foo/Stage.groovy // src/org/foo/Stage.groovy
package org.qg.ci; package org.qg.ci
import org.qg.docker_new.Utils;
import groovy.json.JsonOutput import groovy.json.JsonOutput
import groovy.json.JsonSlurperClassic;
def _utils() { def _utils() {
return new org.qg.docker_new.Utils(); return new org.qg.docker_new.Utils();
} }
def sonaar_check(GIT_REPO_NAME,GIT_BRANCH,currentPath){ def sonaar_check(GIT_REPO_NAME, GIT_BRANCH, currentPath) {
_utils().beautyEcho("sonar check +++", "info") _utils().beautyEcho("sonar check +++", "info")
sonarScanner = "/home/quant_group/jenkins_home/tools/hudson.plugins.sonar.SonarRunnerInstallation/sonar/bin/sonar-scanner" sonarScanner = "/home/quant_group/jenkins_home/tools/hudson.plugins.sonar.SonarRunnerInstallation/sonar/bin/sonar-scanner"
currentPath = sh (script: 'pwd',returnStdout: true).trim() currentPath = sh(script: 'pwd', returnStdout: true).trim()
git branch: "${GIT_BRANCH}", credentialsId: 'c6be40a7-235a-46db-89b8-61cfcbcbc1c4', url: "${GIT_REPO_SSH_URL}" git branch: "${GIT_BRANCH}", credentialsId: 'c6be40a7-235a-46db-89b8-61cfcbcbc1c4', url: "${GIT_REPO_SSH_URL}"
/* git commit: "${GIT_BRANCH}", credentialsId: 'c6be40a7-235a-46db-89b8-61cfcbcbc1c4', url: "${GIT_REPO_SSH_URL}"*/ /* git commit: "${GIT_BRANCH}", credentialsId: 'c6be40a7-235a-46db-89b8-61cfcbcbc1c4', url: "${GIT_REPO_SSH_URL}"*/
sh "${sonarScanner} -e \ sh "${sonarScanner} -e \
...@@ -27,67 +26,66 @@ def sonaar_check(GIT_REPO_NAME,GIT_BRANCH,currentPath){ ...@@ -27,67 +26,66 @@ def sonaar_check(GIT_REPO_NAME,GIT_BRANCH,currentPath){
-Dsonar.java.source=1.8 \ -Dsonar.java.source=1.8 \
-Dsonar.java.target=1.8 \ -Dsonar.java.target=1.8 \
-Dsonar.projectBaseDir=${currentPath}" -Dsonar.projectBaseDir=${currentPath}"
} }
def callback_pipes(callbackHost ,taskId) { def callback_pipes(callbackHost, taskId) {
sleep 3 sleep 3
sonarInfo = sh (script: 'cat .sonar/report-task.txt |awk \'{printf $0 "&"}\'',returnStdout: true).trim() sonarInfo = sh(script: 'cat .sonar/report-task.txt |awk \'{printf $0 "&"}\'', returnStdout: true).trim()
items = sonarInfo.split("&") items = sonarInfo.split("&")
def content=[:] def content = [:]
for (def item : items){ for (def item : items) {
itemSplit = item.split("=",2) itemSplit = item.split("=", 2)
content[itemSplit[0]] =itemSplit[1] content[itemSplit[0]] = itemSplit[1]
} }
body =[:] body = [:]
body["taskId"] = taskId body["taskId"] = taskId
body["content"] = content body["content"] = content
def bodyJson = JsonOutput.toJson(body) def bodyJson = JsonOutput.toJson(body)
echo bodyJson echo bodyJson
response = httpRequest httpMode:"POST", response = httpRequest httpMode: "POST",
consoleLogResponseBody:true, consoleLogResponseBody: true,
contentType:"APPLICATION_JSON", contentType: "APPLICATION_JSON",
requestBody:"${bodyJson}", requestBody: "${bodyJson}",
url:callbackHost url: callbackHost
/* def res_json = jsonParse(response.content) /* def res_json = jsonParse(response.content)
return res_json*/ return res_json*/
/*callbackData = "${sonarReportTask}pipelineEntityId=aaa&taskNum=1"
/*callbackData = "${sonarReportTask}pipelineEntityId=aaa&taskNum=1" echo "==========================="
echo "===========================" echo callbackData
echo callbackData echo "==========================="
echo "===========================" // def props = new Properties()
// def props = new Properties() // props.load(sonarReportTask)
// props.load(sonarReportTask)
sh "curl --data ${callbackData} http://mock.q-gp.com"*/
sh "curl --data ${callbackData} http://mock.q-gp.com"*/
} }
def update_microservice(namespace, name, image, tier) { def update_microservice(namespace, name, image, tier) {
dest_url = "http://eos.quantgroups.com/api/qahome/update_microservice" dest_url = "http://eos.quantgroups.com/api/qahome/update_microservice"
response = httpRequest httpMode:"PUT", response = httpRequest httpMode: "PUT",
consoleLogResponseBody:true, consoleLogResponseBody: true,
contentType:"APPLICATION_JSON", contentType: "APPLICATION_JSON",
requestBody:"""{ requestBody: """{
"namespace":"${namespace}", "namespace":"${namespace}",
"name":"${name}", "name":"${name}",
"image":"${image}", "image":"${image}",
"tier":"${tier}" "tier":"${tier}"
}""", }""",
url:dest_url url: dest_url
def res_json = jsonParse(response.content) def res_json = jsonParse(response.content)
return res_json return res_json
} }
......
package org.qg.ci; package org.qg.ci
import org.qg.docker_new.Utils;
import groovy.json.JsonOutput import groovy.json.JsonOutput
import groovy.json.JsonSlurperClassic;
def _utils() { def _utils() {
return new org.qg.docker_new.Utils(); return new org.qg.docker_new.Utils();
} }
@NonCPS @NonCPS
def jsonParse(def json) { def jsonParse(def json) {
new groovy.json.JsonSlurperClassic().parseText(json) new groovy.json.JsonSlurperClassic().parseText(json)
} }
def project_attr(systemName) { def project_attr(systemName) {
response = httpRequest "http://qaapi.liangkebang.com/proconfig/get_info?system_name=${systemName}" response = httpRequest "http://qaapi.liangkebang.com/proconfig/get_info?system_name=${systemName}"
def res_json = jsonParse(response.content) def res_json = jsonParse(response.content)
return res_json["data"] return res_json["data"]
} }
def sonar_job(branchHashCode) { def sonar_job(branchHashCode) {
response = httpRequest "http://qaapi.liangkebang.com/sonar/getSonarJob?branchHash=${branchHashCode}" response = httpRequest "http://qaapi.liangkebang.com/sonar/getSonarJob?branchHash=${branchHashCode}"
def res_json = jsonParse(response.content) def res_json = jsonParse(response.content)
return res_json["data"] return res_json["data"]
} }
def checkout(GIT_REPO,BRANCH_NAME){ def checkout(GIT_REPO, BRANCH_NAME) {
body =[:] body = [:]
def projectAttr = project_attr(GIT_REPO) def projectAttr = project_attr(GIT_REPO)
git_path = projectAttr["git_path"] git_path = projectAttr["git_path"]
git branch: "${BRANCH_NAME}", credentialsId: 'c6be40a7-235a-46db-89b8-61cfcbcbc1c4', url: "${git_path}" git branch: "${BRANCH_NAME}", credentialsId: 'c6be40a7-235a-46db-89b8-61cfcbcbc1c4', url: "${git_path}"
def branchHashCode = sh (script: 'git log -1 --pretty=%H',returnStdout: true).trim() def branchHashCode = sh(script: 'git log -1 --pretty=%H', returnStdout: true).trim()
echo "branchHashCode: ${branchHashCode} with 'git log -1 --pretty=%H'" echo "branchHashCode: ${branchHashCode} with 'git log -1 --pretty=%H'"
body["branchHash"] = branchHashCode body["branchHash"] = branchHashCode
def gitUserMail = sh (script: 'git log -1 --pretty=%ae',returnStdout: true).trim() def gitUserMail = sh(script: 'git log -1 --pretty=%ae', returnStdout: true).trim()
echo "gitUserMail: ${gitUserMail} with 'git log -1 --pretty=%ae'" echo "gitUserMail: ${gitUserMail} with 'git log -1 --pretty=%ae'"
body["gitUserMail"] = gitUserMail body["gitUserMail"] = gitUserMail
return body return body
} }
def sonar_check(GIT_REPO,BRANCH_NAME,FORCE_SCAN,body){ def sonar_check(GIT_REPO, BRANCH_NAME, FORCE_SCAN, body) {
def sonarJob = sonar_job(body["branchHash"]) def sonarJob = sonar_job(body["branchHash"])
if (FORCE_SCAN != 'true' && sonarJob && sonarJob["sonarResult"]) { if (FORCE_SCAN != 'true' && sonarJob && sonarJob["sonarResult"]) {
body["sonarJob"] = sonarJob body["sonarJob"] = sonarJob
echo "本次扫描的代码曾经扫描过,扫描结果:${sonarJob["sonarResult"]}" echo "本次扫描的代码曾经扫描过,扫描结果:${sonarJob["sonarResult"]}"
} else { } else {
_utils().beautyEcho("sonar scan +++", "info") _utils().beautyEcho("sonar scan +++", "info")
sonarScanner = "/home/quant_group/jenkins_home/tools/hudson.plugins.sonar.SonarRunnerInstallation/sonar/bin/sonar-scanner" sonarScanner = "/home/quant_group/jenkins_home/tools/hudson.plugins.sonar.SonarRunnerInstallation/sonar/bin/sonar-scanner"
currentPath = sh (script: 'pwd',returnStdout: true).trim() currentPath = sh(script: 'pwd', returnStdout: true).trim()
sh "${sonarScanner} -e \ sh "${sonarScanner} -e \
-Dsonar.host.url=http://sonar.quantgroups.com \ -Dsonar.host.url=http://sonar.quantgroups.com \
-Dsonar.projectVersion=${BRANCH_NAME} \ -Dsonar.projectVersion=${BRANCH_NAME} \
-Dsonar.projectKey=${GIT_REPO} \ -Dsonar.projectKey=${GIT_REPO} \
...@@ -57,37 +56,37 @@ def sonar_check(GIT_REPO,BRANCH_NAME,FORCE_SCAN,body){ ...@@ -57,37 +56,37 @@ def sonar_check(GIT_REPO,BRANCH_NAME,FORCE_SCAN,body){
-Dsonar.java.source=1.8 \ -Dsonar.java.source=1.8 \
-Dsonar.java.target=1.8 \ -Dsonar.java.target=1.8 \
-Dsonar.projectBaseDir=${currentPath}" -Dsonar.projectBaseDir=${currentPath}"
sleep 3 sleep 3
sonarInfo = sh (script: 'cat .sonar/report-task.txt |awk \'{printf $0 "&"}\'',returnStdout: true).trim() sonarInfo = sh(script: 'cat .sonar/report-task.txt |awk \'{printf $0 "&"}\'', returnStdout: true).trim()
items = sonarInfo.split("&") items = sonarInfo.split("&")
def content=[:] def content = [:]
for (def item : items){ for (def item : items) {
itemSplit = item.split("=",2) itemSplit = item.split("=", 2)
content[itemSplit[0]] =itemSplit[1] content[itemSplit[0]] = itemSplit[1]
}
body["content"] = content
body["duration"] = currentBuild.duration
} }
return body
body["content"] = content
body["duration"] = currentBuild.duration
}
return body
} }
def call_back(body,callbackHost,dingRobotAddr,GIT_TRIGGER_USER,FORCE_SCAN){ def call_back(body, callbackHost, dingRobotAddr, GIT_TRIGGER_USER, FORCE_SCAN) {
body["dingRobotAddr"] = dingRobotAddr body["dingRobotAddr"] = dingRobotAddr
body["projectName"] = GIT_REPO body["projectName"] = GIT_REPO
body["branchName"] = BRANCH_NAME body["branchName"] = BRANCH_NAME
body["gitUser"] = GIT_TRIGGER_USER body["gitUser"] = GIT_TRIGGER_USER
body["mail"] = FORCE_SCAN body["mail"] = FORCE_SCAN
body["buildId"] = currentBuild.number body["buildId"] = currentBuild.number
body["buildJob"] = env.JOB_NAME body["buildJob"] = env.JOB_NAME
body["absoluteUrl"] = currentBuild.absoluteUrl body["absoluteUrl"] = currentBuild.absoluteUrl
def bodyJson = JsonOutput.toJson(body) def bodyJson = JsonOutput.toJson(body)
echo bodyJson echo bodyJson
response = httpRequest httpMode:"POST", response = httpRequest httpMode: "POST",
consoleLogResponseBody:true, consoleLogResponseBody: true,
contentType:"APPLICATION_JSON", contentType: "APPLICATION_JSON",
requestBody:"${bodyJson}", requestBody: "${bodyJson}",
url:callbackHost url: callbackHost
} }
This diff is collapsed.
...@@ -9,36 +9,36 @@ def beautyEcho(content, type) { ...@@ -9,36 +9,36 @@ def beautyEcho(content, type) {
purple = "35" purple = "35"
darkgreen = "36" darkgreen = "36"
result = "" result = ""
switch(type) { switch (type) {
case "info": case "info":
content = " ➢➢➢➢➢ \n${content} \n ➢➢➢➢➢" content = " ➢➢➢➢➢ \n${content} \n ➢➢➢➢➢"
result = "\033[${blue}m${content}\033[0m" result = "\033[${blue}m${content}\033[0m"
break break
case "success": case "success":
content = " ✔✔✔✔✔ \n${content} \n ✔✔✔✔✔" content = " ✔✔✔✔✔ \n${content} \n ✔✔✔✔✔"
result = "\033[${green}m${content}\033[0m" result = "\033[${green}m${content}\033[0m"
break break
case "fail": case "fail":
content = " ✘✘✘✘✘ \n${content} \n ✘✘✘✘✘" content = " ✘✘✘✘✘ \n${content} \n ✘✘✘✘✘"
result = "\033[${red}m${content}\033[0m" result = "\033[${red}m${content}\033[0m"
break break
case "stage": case "stage":
content = " ✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩ \n ${content} \n ✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩" content = " ✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩ \n ${content} \n ✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩"
result = "\033[${purple}m${content}\033[0m" result = "\033[${purple}m${content}\033[0m"
break break
default: default:
result = content result = content
break break
} }
echo result echo result
} }
def beautyEcho_tmp(content, type) { def beautyEcho_tmp(content, type) {
...@@ -48,37 +48,37 @@ def beautyEcho_tmp(content, type) { ...@@ -48,37 +48,37 @@ def beautyEcho_tmp(content, type) {
purple = "35" purple = "35"
darkgreen = "36" darkgreen = "36"
result = "" result = ""
switch(type) { switch (type) {
case "info": case "info":
content = " ➢➢➢➢➢ \n${content} \n ➢➢➢➢➢" content = " ➢➢➢➢➢ \n${content} \n ➢➢➢➢➢"
result = "\033[${blue}m${content}\033[0m" result = "\033[${blue}m${content}\033[0m"
break break
case "success": case "success":
content = " ✔✔✔✔✔ \n${content} \n ✔✔✔✔✔" content = " ✔✔✔✔✔ \n${content} \n ✔✔✔✔✔"
result = "\033[${green}m${content}\033[0m" result = "\033[${green}m${content}\033[0m"
break break
case "fail": case "fail":
content = " ✘✘✘✘✘ \n${content} \n ✘✘✘✘✘" content = " ✘✘✘✘✘ \n${content} \n ✘✘✘✘✘"
result = "\033[${red}m${content}\033[0m" result = "\033[${red}m${content}\033[0m"
break break
case "stage": case "stage":
content = " ✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩ \n ${content} \n ✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩" content = " ✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩ \n ${content} \n ✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩"
result = "\033[${purple}m${content}\033[0m" result = "\033[${purple}m${content}\033[0m"
break break
default: default:
result = content result = content
break break
}
ansiColor('xterm') {
echo result
} }
ansiColor('xterm') {
echo result
}
} }
def copyDockerFiles() { def copyDockerFiles() {
......
// src/org/foo/Stage.groovy // src/org/foo/Stage.groovy
package org.qg.tools; package org.qg.tools
import org.qg.tools.Utils;
import groovy.json.JsonSlurperClassic;
def _utils(){ def _utils() {
def _utils = new org.qg.tools.Utils(); def _utils = new org.qg.tools.Utils();
return _utils return _utils
} }
...@@ -24,18 +22,18 @@ def checkout_eos(branchName) { ...@@ -24,18 +22,18 @@ def checkout_eos(branchName) {
def build_eos(contextDir) { def build_eos(contextDir) {
sh "mv run.py ${contextDir}" sh "mv run.py ${contextDir}"
sh "mv requirements.txt ${contextDir}" sh "mv requirements.txt ${contextDir}"
sh 'tar zcf dist.tgz app/' sh 'tar zcf dist.tgz app/'
sh "mv dist.tgz ${contextDir}" sh "mv dist.tgz ${contextDir}"
} }
def dockerbuild_and_push(buildNumber, branchName, harborGroup, systemName, contextDir) { def dockerbuild_and_push(buildNumber, branchName, harborGroup, systemName, contextDir) {
regex = "[`,./;\\[\\]&<>?:\"()|-]+" regex = "[`,./;\\[\\]&<>?:\"()|-]+"
safeBranchName = branchName.replaceAll(regex,"_") safeBranchName = branchName.replaceAll(regex, "_")
safeSystemName = "project" safeSystemName = "project"
imageTag = "192.168.4.4/${harborGroup}/${systemName}:${safeBranchName}-${buildNumber}" imageTag = "192.168.4.4/${harborGroup}/${systemName}:${safeBranchName}-${buildNumber}"
withDockerServer([uri: "tcp://192.168.4.96:2375/"]) { withDockerServer([uri: "tcp://192.168.4.96:2375/"]) {
withDockerRegistry([credentialsId: 'harbor-qajenkins', url: "http://192.168.4.4"]) { withDockerRegistry([credentialsId: 'harbor-qajenkins', url: "http://192.168.4.4"]) {
def image = docker.build(imageTag, "--build-arg SYSTEM_NAME=${systemName} ${contextDir}") def image = docker.build(imageTag, "--build-arg SYSTEM_NAME=${systemName} ${contextDir}")
...@@ -48,10 +46,10 @@ def dockerbuild_and_push(buildNumber, branchName, harborGroup, systemName, conte ...@@ -48,10 +46,10 @@ def dockerbuild_and_push(buildNumber, branchName, harborGroup, systemName, conte
} }
def deploy(namespace, systemName, imageTag, tier) { def deploy(namespace, systemName, imageTag, tier) {
def deploy_job_info def deploy_job_info
_utils().beautyEcho("[新集群][deploy]将镜像更新到到Namespace:" + namespace, "info") _utils().beautyEcho("[新集群][deploy]将镜像更新到到Namespace:" + namespace, "info")
log = update_microservice(namespace, systemName, imageTag, tier) log = update_microservice(namespace, systemName, imageTag, tier)
return log return log
} }
def clean_images(imageTag) { def clean_images(imageTag) {
...@@ -64,19 +62,19 @@ def jsonParse(def json) { ...@@ -64,19 +62,19 @@ def jsonParse(def json) {
} }
def update_microservice(namespace, name, image, tier) { def update_microservice(namespace, name, image, tier) {
dest_url = "http://eos.quantgroups.com/api/qahome/update_microservice" dest_url = "http://eos.quantgroups.com/api/qahome/update_microservice"
response = httpRequest httpMode:"PUT", response = httpRequest httpMode: "PUT",
consoleLogResponseBody:true, consoleLogResponseBody: true,
contentType:"APPLICATION_JSON", contentType: "APPLICATION_JSON",
requestBody:"""{ requestBody: """{
"namespace":"${namespace}", "namespace":"${namespace}",
"name":"${name}", "name":"${name}",
"image":"${image}", "image":"${image}",
"tier":"${tier}" "tier":"${tier}"
}""", }""",
url:dest_url url: dest_url
def res_json = jsonParse(response.content) def res_json = jsonParse(response.content)
return res_json return res_json
} }
......
...@@ -14,31 +14,31 @@ def beautyEcho(content, type) { ...@@ -14,31 +14,31 @@ def beautyEcho(content, type) {
purple = "35" purple = "35"
darkgreen = "36" darkgreen = "36"
result = "" result = ""
switch(type) { switch (type) {
case "info": case "info":
content = " ➢➢➢➢➢ ${content}" content = " ➢➢➢➢➢ ${content}"
result = "\033[${blue}m${content}\033[0m" result = "\033[${blue}m${content}\033[0m"
break break
case "success": case "success":
content = " ✔✔✔✔✔ ${content}" content = " ✔✔✔✔✔ ${content}"
result = "\033[${green}m${content}\033[0m" result = "\033[${green}m${content}\033[0m"
break break
case "fail": case "fail":
content = " ✘✘✘✘✘ ${content}" content = " ✘✘✘✘✘ ${content}"
result = "\033[${red}m${content}\033[0m" result = "\033[${red}m${content}\033[0m"
break break
case "stage": case "stage":
content = " ✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩ ${content} ✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩" content = " ✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩ ${content} ✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩✩"
result = "\033[${purple}m${content}\033[0m" result = "\033[${purple}m${content}\033[0m"
break break
default: default:
result = content result = content
break break
} }
echo result echo result
......
import org.qg.docker.* import org.qg.docker.*
import java.time.* import java.time.*
def getTime(){ def getTime() {
LocalDateTime t = LocalDateTime.now(); LocalDateTime t = LocalDateTime.now();
return t as String return t as String
} }
def call(body) { def call(body) {
def config = [:] def config = [:]
def env = body.env def env = body.env
def branchName = env.BRANCH_NAME def branchName = env.BRANCH_NAME
def gitRepo = env.GIT_REPO def gitRepo = env.GIT_REPO
def namespace = env.NAMESPACE def namespace = env.NAMESPACE
def isDeploy = env.IS_DEPLOY def isDeploy = env.IS_DEPLOY
def buildNumber = env.BUILD_NUMBER def buildNumber = env.BUILD_NUMBER
def cluster = env.CLUSTER def cluster = env.CLUSTER
t = gitRepo.split("/") t = gitRepo.split("/")
def gitGroup = t[0] def gitGroup = t[0]
...@@ -26,82 +26,82 @@ def call(body) { ...@@ -26,82 +26,82 @@ def call(body) {
def systemName = originSystemName.toLowerCase() def systemName = originSystemName.toLowerCase()
echo "====JOB_NAME : ${env.JOB_NAME}" echo "====JOB_NAME : ${env.JOB_NAME}"
def harborGroup = "library" def harborGroup = "library"
/* def workspace = "/home/quant_ group/jenkins_home/workspace/${env.JOB_NAME}"*/ /* def workspace = "/home/quant_ group/jenkins_home/workspace/${env.JOB_NAME}"*/
def imageTag def imageTag
def timeStemp = new Date().format("yyyyMMddHHmmss") def timeStemp = new Date().format("yyyyMMddHHmmss")
def _stage = new org.qg.docker.StageBucket() def _stage = new org.qg.docker.StageBucket()
def _utils = new org.qg.docker.Utils() def _utils = new org.qg.docker.Utils()
def contextDir = "/home/quant_group/package/${systemName}-${timeStemp}" def contextDir = "/home/quant_group/package/${systemName}-${timeStemp}"
body.resolveStrategy = Closure.DELEGATE_FIRST body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = config body.delegate = config
body() body()
node { node {
try { try {
sh "mkdir -p ${contextDir}" sh "mkdir -p ${contextDir}"
withDockerServer([uri: "tcp://192.168.4.96:2375/"]) { withDockerServer([uri: "tcp://192.168.4.96:2375/"]) {
def volume = "-v /root/.m2:/root/.m2 " def volume = "-v /root/.m2:/root/.m2 "
volume +="-v /home/quant_group/qg-dockerfiles:/home/quant_group/qg-dockerfiles " volume += "-v /home/quant_group/qg-dockerfiles:/home/quant_group/qg-dockerfiles "
volume +="-v /home/quant_group/config_repository:/home/quant_group/config_repository " volume += "-v /home/quant_group/config_repository:/home/quant_group/config_repository "
volume +="-v /home/quant_group/package/:/home/quant_group/package/ " volume += "-v /home/quant_group/package/:/home/quant_group/package/ "
docker.image("192.168.4.36/baseimg/jenkins-slave:2018040302").inside(volume){ docker.image("192.168.4.36/baseimg/jenkins-slave:2018040302").inside(volume) {
git_path = project_attr(systemName)["gitPath"] git_path = project_attr(systemName)["gitPath"]
if(git_path =="git@gitabc.xyqb.com:data-riskcontrol/urge-dispatcher.git"){ if (git_path == "git@gitabc.xyqb.com:data-riskcontrol/urge-dispatcher.git") {
git_path = "git@gitabc.xyqb.com:data-riskcontrol/urge_dispatcher.git" git_path = "git@gitabc.xyqb.com:data-riskcontrol/urge_dispatcher.git"
} }
git branch: branchName, credentialsId: 'c6be40a7-235a-46db-89b8-61cfcbcbc1c4', url: git_path git branch: branchName, credentialsId: 'c6be40a7-235a-46db-89b8-61cfcbcbc1c4', url: git_path
sh 'mvn clean package -P test -D maven.test.skip=true' sh 'mvn clean package -P test -D maven.test.skip=true'
applicaton_properties = "/home/quant_group/config_repository/java/${systemName}.properties" applicaton_properties = "/home/quant_group/config_repository/java/${systemName}.properties"
echo applicaton_properties echo applicaton_properties
sh "if [ -f ${applicaton_properties} ]; then cp -rf ${applicaton_properties} ${contextDir}/application.properties; else echo \"## useing apollo ##\" > ${contextDir}/application.properties; fi" sh "if [ -f ${applicaton_properties} ]; then cp -rf ${applicaton_properties} ${contextDir}/application.properties; else echo \"## useing apollo ##\" > ${contextDir}/application.properties; fi"
sh "cp -rf /home/quant_group/qg-dockerfiles/templates_new/java/* ${contextDir}" sh "cp -rf /home/quant_group/qg-dockerfiles/templates_new/java/* ${contextDir}"
sh "cp target/*.jar ${contextDir}/app.jar" sh "cp target/*.jar ${contextDir}/app.jar"
} }
regex = "[`,./;\\[\\]&<>?:\"()|-]+" regex = "[`,./;\\[\\]&<>?:\"()|-]+"
k8sSystemName = systemName.replaceAll("_","-") k8sSystemName = systemName.replaceAll("_", "-")
safeBranchName = branchName.replaceAll(regex,"_") safeBranchName = branchName.replaceAll(regex, "_")
defaultSystemName = "project" defaultSystemName = "project"
timeStemp = new Date().format("yyyyMMddHHmmss") timeStemp = new Date().format("yyyyMMddHHmmss")
imageTag = "192.168.4.36/${harborGroup}/${k8sSystemName}:${safeBranchName}-${timeStemp}" imageTag = "192.168.4.36/${harborGroup}/${k8sSystemName}:${safeBranchName}-${timeStemp}"
withDockerRegistry([credentialsId: 'harbor-qajenkins', url: "http://192.168.4.36"]) { withDockerRegistry([credentialsId: 'harbor-qajenkins', url: "http://192.168.4.36"]) {
def build_schema = "BUILD_TIME: ${timeStemp} ,BUILD_NUMBER: ${buildNumber},SYSTEM_NAME: ${systemName},BRANCH_NAME: ${branchName}, CLUSTER: ${cluster}" def build_schema = "BUILD_TIME: ${timeStemp} ,BUILD_NUMBER: ${buildNumber},SYSTEM_NAME: ${systemName},BRANCH_NAME: ${branchName}, CLUSTER: ${cluster}"
def image = docker.build(imageTag, "--build-arg BUILD_SHCEMA=build_schema ${contextDir}") def image = docker.build(imageTag, "--build-arg BUILD_SHCEMA=build_schema ${contextDir}")
image.push() image.push()
if (branchName == "master" || branchName == "master--master") { if (branchName == "master" || branchName == "master--master") {
image.push('latest') image.push('latest')
} }
} }
} }
}catch (err) { } catch (err) {
ansiColor('xterm') { ansiColor('xterm') {
...@@ -109,10 +109,11 @@ def call(body) { ...@@ -109,10 +109,11 @@ def call(body) {
/*_utils.beautyEcho(err, "fail")*/ /*_utils.beautyEcho(err, "fail")*/
throw err throw err
} }
}finlly(){ }
sh "rm -rf ${contextDir}" finlly() {
_stage.clean_images(imageTag) sh "rm -rf ${contextDir}"
} _stage.clean_images(imageTag)
}
} }
} }
......
import org.qg.ansible.*
def call(body) { def call(body) {
def config = [:] def config = [:]
def env = body.env def env = body.env
...@@ -8,62 +6,62 @@ def call(body) { ...@@ -8,62 +6,62 @@ def call(body) {
def tagName = env.tag_name def tagName = env.tag_name
def tingyun = env.tingyun def tingyun = env.tingyun
def projectName = nameWithNamespace.split("/")[1] def projectName = nameWithNamespace.split("/")[1]
def action = env.action def action = env.action
def force = env.force def force = env.force
def dataCenter = env.data_center def dataCenter = env.data_center
def machines = env.hosts def machines = env.hosts
def operation = env.operation def operation = env.operation
def _utils = new org.qg.ansible.Utils() def _utils = new org.qg.ansible.Utils()
body.resolveStrategy = Closure.DELEGATE_FIRST body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = config body.delegate = config
body() body()
node { node {
stage('Clean') { stage('Clean') {
deleteDir() deleteDir()
} }
def deployUser def deployUser
wrap([$class: 'BuildUser']) { wrap([$class: 'BuildUser']) {
deployUser = BUILD_USER deployUser = BUILD_USER
} }
if (dataCenter == "A" || dataCenter == "C") { if (dataCenter == "A" || dataCenter == "C") {
if ( operation == "online" || operation == "offline") { if (operation == "online" || operation == "offline") {
sh "ansible-playbook /etc/ansible/online-offline.yml -e project_name=${projectName} -e data_center=${dataCenter} -e machines=${machines} -e env=${envType} -e operation=${operation} -v" sh "ansible-playbook /etc/ansible/online-offline.yml -e project_name=${projectName} -e data_center=${dataCenter} -e machines=${machines} -e env=${envType} -e operation=${operation} -v"
}else{ } else {
stage('Build') { stage('Build') {
if (action == 'deploy') { if (action == 'deploy') {
sh "ansible-playbook /etc/ansible/build.yml -e project_name=${projectName} -e data_center=${dataCenter} -e name_with_namespace=${nameWithNamespace} -e tag_name=${tagName} -e force=${force} -e env=${envType} -v" sh "ansible-playbook /etc/ansible/build.yml -e project_name=${projectName} -e data_center=${dataCenter} -e name_with_namespace=${nameWithNamespace} -e tag_name=${tagName} -e force=${force} -e env=${envType} -v"
} }
} }
stage('Deploy') { stage('Deploy') {
if (action == 'deploy') { if (action == 'deploy') {
sh "ansible-playbook /etc/ansible/${action}.yml -e project_name=${projectName} -e data_center=${dataCenter} -e machines=${machines} -e tag_name=${tagName} -e force=${force} -e env=${envType} -v" sh "ansible-playbook /etc/ansible/${action}.yml -e project_name=${projectName} -e data_center=${dataCenter} -e machines=${machines} -e tag_name=${tagName} -e force=${force} -e env=${envType} -v"
if (nameWithNamespace.startsWith("DevOps") || if (nameWithNamespace.startsWith("DevOps") ||
nameWithNamespace.startsWith("QG") || nameWithNamespace.startsWith("QG") ||
nameWithNamespace.startsWith("head_group") || nameWithNamespace.startsWith("head_group") ||
nameWithNamespace.startsWith("funding") || nameWithNamespace.startsWith("funding") ||
nameWithNamespace.startsWith("fund_pay") ) { nameWithNamespace.startsWith("fund_pay")) {
try { try {
sh "cd /home/quant_group/code/" + projectName + ";" \ sh "cd /home/quant_group/code/" + projectName + ";" \
+ "tagMessage=\$(git tag -l -n99 " + tagName+ ");" \ + "tagMessage=\$(git tag -l -n99 " + tagName + ");" \
+ "curl -G --data-urlencode \"tagMessage=\$tagMessage\" http://sonar.quantgroups.com/cicd/jenkins_deploy?deployUser="+deployUser+"\\&tagName=" + tagName + "\\&projectName=" + projectName +";" + "curl -G --data-urlencode \"tagMessage=\$tagMessage\" http://sonar.quantgroups.com/cicd/jenkins_deploy?deployUser=" + deployUser + "\\&tagName=" + tagName + "\\&projectName=" + projectName + ";"
} }
catch (exc) { catch (exc) {
echo '发送上线通知失败,建议尝试人工通知' echo '发送上线通知失败,建议尝试人工通知'
} }
} }
}
if (action == 'rollback') { }
sh "ansible-playbook /etc/ansible/${action}.yml -e project_name=${projectName} -e data_center=${dataCenter} -e machines=${machines} -e rollback_to_release=${tag_name} -e force=${force} -e env=${envType} -v"
} if (action == 'rollback') {
} sh "ansible-playbook /etc/ansible/${action}.yml -e project_name=${projectName} -e data_center=${dataCenter} -e machines=${machines} -e rollback_to_release=${tag_name} -e force=${force} -e env=${envType} -v"
} }
}else{ }
sh "ansible-playbook /etc/ansible/k8s-deploy.yml -e project_name=${projectName} -e data_center=${dataCenter} -e env=${envType} -e image=${image} -v" }
} } else {
sh "ansible-playbook /etc/ansible/k8s-deploy.yml -e project_name=${projectName} -e data_center=${dataCenter} -e env=${envType} -e image=${image} -v"
}
} }
} }
/* /*
docker make pipeline for pipes docker make pipeline for pipes
*/ */
def call(body) { def call(body) {
ansiColor('xterm') { ansiColor('xterm') {
def _stage = new org.qg.docker_new.StageBucket() def _stage = new org.qg.docker_new.StageBucket()
def _utils = new org.qg.docker_new.Utils() def _utils = new org.qg.docker_new.Utils()
//def timeStemp = new Date().format("yyyyMMddHHmmss")
//def timeStemp = new Date().format("yyyyMMddHHmmss")
def env = body.env
def env = body.env
def systemName = env.GIT_PRO_NAME
def systemName = env.GIT_PRO_NAME def branchName = env.BRANCH_NAME
def branchName = env.BRANCH_NAME def buildType = env.BUILD_TYPE == "ui" ? "lua-ui" : env.BUILD_TYPE == "node" ? "nodejs" : env.BUILD_TYPE
def buildType = env.BUILD_TYPE == "ui" ? "lua-ui" : env.BUILD_TYPE == "node" ? "nodejs" : env.BUILD_TYPE /* def namespace = env.NAMESPACE*/
/* def namespace = env.NAMESPACE*/ /* def isDeploy = env.IS_DEPLOY*/
/* def isDeploy = env.IS_DEPLOY*/ def buildNumber = env.BUILD_NUMBER //
def buildNumber = env.BUILD_NUMBER // def cluster = env.CLUSTER // dev
def cluster = env.CLUSTER // dev def harborHost = env.HARBOR_HOST //192.168.4.4
def harborHost =env.HARBOR_HOST //192.168.4.4 def imageTag = env.IMAGE_TAG // Library/xyqb:master-1213123
def imageTag =env.IMAGE_TAG // Library/xyqb:master-1213123 def timeStemp = env.TIMESTEMP
def timeStemp = env.TIMESTEMP
def imageTagInfo = [harborHost: "http://${harborHost}", imageTag: "${harborHost}/${imageTag}"]
def imageTagInfo =[harborHost:"http://${harborHost}",imageTag:"${harborHost}/${imageTag}"]
def contextDir
def contextDir def branchHashCode
def branchHashCode
def schemaInfo = "" +
def schemaInfo = ""+ "\033[32m############################################\n" +
"\033[32m############################################\n"+ "# GIT_PRO_NAME:${systemName}\n" +
"# GIT_PRO_NAME:${systemName}\n"+ "# BRANCH_NAME:${branchName}\n" +
"# BRANCH_NAME:${branchName}\n"+ "# BUILD_TYPE:${buildType}\n" +
"# BUILD_TYPE:${buildType}\n"+ "# HARBOR_HOST:${harborHost}\n" +
"# HARBOR_HOST:${harborHost}\n"+ "# IMAGE_TAG:${imageTag}\n" +
"# IMAGE_TAG:${imageTag}\n"+ "############################################\033[0m"
"############################################\033[0m" ansiColor('xterm') {
ansiColor('xterm') { echo schemaInfo
echo schemaInfo }
}
node {
node {
try {
try { contextDir = _stage.contextMkdir("${systemName}-${timeStemp}")
contextDir = _stage.contextMkdir("${systemName}-${timeStemp}") /* 1 */
/* 1 */ stage('Init') {
stage('Init') { _utils.beautyEcho("Init", "stage")
_utils.beautyEcho("Init", "stage") _stage.init_dependency()
_stage.init_dependency() _stage.init_image_dependency(buildType, systemName, contextDir)
_stage.init_image_dependency(buildType,systemName,contextDir) }
}
withDockerServer([uri: "tcp://192.168.4.96:2375/"]) {
withDockerServer([uri: "tcp://192.168.4.96:2375/"]) { _utils.beautyEcho("checkout & build < ${systemName} : ${branchName} >", "stage")
_utils.beautyEcho("checkout & build < ${systemName} : ${branchName} >", "stage") dir(systemName) {
dir(systemName){ branchHashCode = _stage.check_and_build(buildType, systemName, branchName, contextDir)
branchHashCode = _stage.check_and_build(buildType, systemName, branchName, contextDir) }
} _utils.beautyEcho("build over", "info")
_utils.beautyEcho("build over", "info") }
}
/* 3 */
withDockerServer([uri: "tcp://192.168.4.96:2375/"]) {
/* 3 */ _utils.beautyEcho("make docker image", "stage")
withDockerServer([uri: "tcp://192.168.4.96:2375/"]) {
_utils.beautyEcho("make docker image", "stage") _stage.dockerbuild_and_push(imageTagInfo, buildNumber, systemName, branchName, cluster, timeStemp, contextDir, branchHashCode)
_stage.dockerbuild_and_push(imageTagInfo,buildNumber,systemName,branchName ,cluster,timeStemp,contextDir,branchHashCode) }
} /* 4 */
stage('Clean') {
/* 4 */ _utils.beautyEcho("Clear Cache Tmp", "stage")
stage('Clean'){ _stage.clean_images(imageTagInfo["imageTag"], contextDir)
_utils.beautyEcho("Clear Cache Tmp", "stage") }
_stage.clean_images(imageTagInfo["imageTag"],contextDir)
} } catch (err) {
_utils.beautyEcho(err, "fail")
} catch (err) { _stage.clean_images(imageTagInfo["imageTag"], contextDir)
_utils.beautyEcho(err, "fail")
_stage.clean_images(imageTagInfo["imageTag"],contextDir) throw err
}
throw err }
}
} }
}
} }
......
...@@ -3,63 +3,63 @@ ...@@ -3,63 +3,63 @@
*/ */
def call(body) { def call(body) {
def _stage = new org.qg.ci.SonarStageBucket() def _stage = new org.qg.ci.SonarStageBucket()
def _utils = new org.qg.docker_new.Utils() def _utils = new org.qg.docker_new.Utils()
def env = body.env def env = body.env
def GIT_REPO_SSH_URL = env.GIT_REPO_SSH_URL def GIT_REPO_SSH_URL = env.GIT_REPO_SSH_URL
def GIT_REPO_NAME = env.GIT_REPO_NAME def GIT_REPO_NAME = env.GIT_REPO_NAME
def GIT_BRANCH = env.GIT_BRANCH def GIT_BRANCH = env.GIT_BRANCH
def GIT_BRANCH_HASH = env.GIT_BRANCH_HASH def GIT_BRANCH_HASH = env.GIT_BRANCH_HASH
def GIT_TRIGGER_USER = env.GIT_TRIGGER_USER def GIT_TRIGGER_USER = env.GIT_TRIGGER_USER
def TASK_INDEX = env.TASK_INDEX def TASK_INDEX = env.TASK_INDEX
def callbackHost def callbackHost
def config = [:] def config = [:]
def currentPath def currentPath
body.resolveStrategy = Closure.DELEGATE_FIRST body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = config body.delegate = config
body() body()
GIT_BRANCH = GIT_BRANCH.replaceAll("refs/heads/","") GIT_BRANCH = GIT_BRANCH.replaceAll("refs/heads/", "")
callbackHost = config.callbackHost callbackHost = config.callbackHost
def schemaInfo = ""+ def schemaInfo = "" +
"\033[32m############################################\n"+ "\033[32m############################################\n" +
"# GIT_REPO_SSH_URL:${GIT_REPO_SSH_URL}\n"+ "# GIT_REPO_SSH_URL:${GIT_REPO_SSH_URL}\n" +
"# GIT_REPO_NAME:${GIT_REPO_NAME}\n"+ "# GIT_REPO_NAME:${GIT_REPO_NAME}\n" +
"# GIT_BRANCH:${GIT_BRANCH}\n"+ "# GIT_BRANCH:${GIT_BRANCH}\n" +
"# GIT_BRANCH_HASH:${GIT_BRANCH_HASH}\n"+ "# GIT_BRANCH_HASH:${GIT_BRANCH_HASH}\n" +
"# GIT_TRIGGER_USER:${GIT_TRIGGER_USER}\n"+ "# GIT_TRIGGER_USER:${GIT_TRIGGER_USER}\n" +
"############################################\033[0m" "############################################\033[0m"
ansiColor('xterm') { ansiColor('xterm') {
echo schemaInfo echo schemaInfo
} }
node{ node {
try { try {
dir(GIT_REPO_NAME){ dir(GIT_REPO_NAME) {
currentPath = sh (script: 'pwd',returnStdout: true).trim() currentPath = sh(script: 'pwd', returnStdout: true).trim()
stage("SonarQube Quality Gate"){ stage("SonarQube Quality Gate") {
_stage.sonaar_check(GIT_REPO_NAME,GIT_BRANCH,currentPath) _stage.sonaar_check(GIT_REPO_NAME, GIT_BRANCH, currentPath)
} }
stage("callback"){ stage("callback") {
_stage.callback_pipes(callbackHost,TASK_INDEX) _stage.callback_pipes(callbackHost, TASK_INDEX)
} }
} }
} catch (err) { } catch (err) {
throw err throw err
} }
} }
} }
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
import org.qg.tools.*
def call(body) { def call(body) {
def config = [:] def config = [:]
def env = body.env def env = body.env
def workspace = "/home/quant_group/jenkins_home/workspace/${env.JOB_NAME}" def workspace = "/home/quant_group/jenkins_home/workspace/${env.JOB_NAME}"
def imageTag def imageTag
def _stage = new org.qg.tools.StageBucket() def _stage = new org.qg.tools.StageBucket()
def _utils = new org.qg.tools.Utils() def _utils = new org.qg.tools.Utils()
body.resolveStrategy = Closure.DELEGATE_FIRST body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = config body.delegate = config
body() body()
def namespace = "default" def namespace = "default"
def systemName = config.systemName def systemName = config.systemName
def branchName = "master" def branchName = "master"
...@@ -22,15 +20,15 @@ def call(body) { ...@@ -22,15 +20,15 @@ def call(body) {
def buildNumber = env.BUILD_NUMBER def buildNumber = env.BUILD_NUMBER
def contextDir def contextDir
node { node {
try { try {
ansiColor('xterm') { ansiColor('xterm') {
dir (systemName) { dir(systemName) {
timestamps { timestamps {
stage('Init') { stage('Init') {
_utils.beautyEcho("Init", "stage") _utils.beautyEcho("Init", "stage")
} }
stage('Checkout') { stage('Checkout') {
_utils.beautyEcho("Checkout", "stage") _utils.beautyEcho("Checkout", "stage")
switch (systemName) { switch (systemName) {
...@@ -42,7 +40,7 @@ def call(body) { ...@@ -42,7 +40,7 @@ def call(body) {
break break
} }
} }
stage('Prepare') { stage('Prepare') {
_utils.beautyEcho("Prepare", "stage") _utils.beautyEcho("Prepare", "stage")
contextDir = _utils.contextDir(workspace) contextDir = _utils.contextDir(workspace)
...@@ -56,13 +54,13 @@ def call(body) { ...@@ -56,13 +54,13 @@ def call(body) {
break break
} }
} }
stage('Build') { stage('Build') {
_utils.beautyEcho("Build", "stage") _utils.beautyEcho("Build", "stage")
switch (systemName) { switch (systemName) {
case "eos": case "eos":
_stage.build_eos(contextDir) _stage.build_eos(contextDir)
break break
default: default:
echo "Stage_Build: 未知的系统: ${systemName}" echo "Stage_Build: 未知的系统: ${systemName}"
break break
...@@ -72,8 +70,8 @@ def call(body) { ...@@ -72,8 +70,8 @@ def call(body) {
stage('Docker Build And Push') { stage('Docker Build And Push') {
_utils.beautyEcho("Docker Build And Push", "stage") _utils.beautyEcho("Docker Build And Push", "stage")
if (config.buildType == "java") { if (config.buildType == "java") {
_stage.copy_files_java(systemName) _stage.copy_files_java(systemName)
} }
imageTag = _stage.dockerbuild_and_push(buildNumber, branchName, harborGroup, systemName, contextDir) imageTag = _stage.dockerbuild_and_push(buildNumber, branchName, harborGroup, systemName, contextDir)
} }
...@@ -82,14 +80,14 @@ def call(body) { ...@@ -82,14 +80,14 @@ def call(body) {
def deploy_log = _stage.deploy(namespace, systemName, imageTag, config.tier) def deploy_log = _stage.deploy(namespace, systemName, imageTag, config.tier)
_utils.beautyEcho(deploy_log, "info") _utils.beautyEcho(deploy_log, "info")
} }
stage("Clean") { stage("Clean") {
_utils.beautyEcho("Clean", "stage") _utils.beautyEcho("Clean", "stage")
_stage.clean_images(imageTag) _stage.clean_images(imageTag)
} }
} }
} }
} }
} catch (err) { } catch (err) {
ansiColor('xterm') { ansiColor('xterm') {
if (imageTag) { if (imageTag) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment