groovy 脚本实例 创建ConfigMap
创建ConfigMap
package platform.branch_feature.
node('ecs_wuhan_docker') {
println "${BUILD_URL}console"
def xxlJob = ENVIRONMENT_NAME
def xxlJobIp = "192.168.61.53:80"
//ecs2.0-jenkins通知群
def wxKey = '79bc4571-2835-4458-9341-043ab3769436'
//失败信息通知运维处理人,李文超
def noticeTelNumber = '18201292571'
def jfrogBaseAddress = 'http://ecs_read:ecs_read@192.168.48.96:8081/artifactory'
def harborProject = 'ecs2-dev'
def javaImageConsole = "${HARBOR_ADDRESS}/${harborProject}/${ENVIRONMENT_NAME}-console-jar:latest"
def javaImageEcs = "${HARBOR_ADDRESS}/${harborProject}/${ENVIRONMENT_NAME}-ecs-jar:latest"
def nodeSelector = 'ecs2'
def dbDriver = 'com.mysql.jdbc.Driver'
def jdbcParam = "useUnicode=true\\&characterEncoding=UTF-8\\&useSSL=false\\&allowMultiQueries=true\\&rewriteBatchStatements=true\\&serverTimezone=GMT\\%2B8"
def consoleDbUrl = "jdbc:mysql:\\/\\/mysql:3306\\/yn_console?${jdbcParam}"
def ecsDbUrl = "jdbc:mysql:\\/\\/mysql:3306\\/yn_ecs?${jdbcParam}"
def helperDialect = "mysql"
def mysqlAdminUser = "ecs_dev"
def mysqlAdminPassword = "ecs_dev"
def branch = ENVIRONMENT_BRANCH
try {
stage('wx notice start') {
deleteDir()
}
parallel(
'java-console': {
stage('make console image') {
print("compile_java_upgrade console")
dir("image_console_dir") {
sh 'rm -rf application.yml application-dev.yml'
sh "curl -O ${jfrogBaseAddress}/ecs2_java_dev/SNAPSHOT/dev/java-ecs2/console/application.yml"
sh "curl -O ${jfrogBaseAddress}/ecs2_java_dev/SNAPSHOT/dev/java-ecs2/console/application-dev.yml"
def configFile = "application-dev.yml"
fixJavaConfigDataSource(configFile, dbDriver, consoleDbUrl, mysqlAdminUser, mysqlAdminPassword, helperDialect)
fixJavaConfigRedis(configFile)
fixJavaConfigYn(configFile, xxlJobIp, xxlJob + '-console')
fixConsoleUrl(configFile)
createConfigmap('console-application-yml','application.yml')
createConfigmap('console-application-dev-yml','application-dev.yml')
}
}
},
'java-ecs': {
stage('make ecs image') {
dir("image_ecs_dir") {
sh 'rm -rf ecs.jar application.yml application-dev.yml'
sh "curl -O ${jfrogBaseAddress}/ecs2_java_dev/SNAPSHOT/${branch}/java-ecs2/ecs/application.yml"
sh "curl -O ${jfrogBaseAddress}/ecs2_java_dev/SNAPSHOT/${branch}/java-ecs2/ecs/application-dev.yml"
def configFile = "application-dev.yml"
fixJavaConfigDataSource(configFile, dbDriver, ecsDbUrl, mysqlAdminUser, mysqlAdminPassword, helperDialect)
fixJavaConfigRedis(configFile)
fixJavaConfigYn(configFile, xxlJobIp, xxlJob + '-ecs')
fixEcsUrl(configFile)
createConfigmap('ecs-application-yml','application.yml')
createConfigmap('ecs-application-dev-yml','application-dev.yml')
}
}
},
)
createKubernetesDeployment(nodeSelector, javaImageConsole, javaImageEcs)
stage('apply kubernetes.yml') {
rancherDeploy()
}
} catch (e) {
wxFailNotice(wxKey, noticeTelNumber)
throw e
} finally {
println "${BUILD_URL}console"
deleteDir()
}
}
def wxFailNotice(wxKey, noticeTelNumber) {
def proposerName = PROPOSER_NAME
def jobName = JOB_NAME
def text = "<font color=info>【${proposerName}的${jobName}】</font>任务执行<font color=warning>失败!!!</font>\\n >[查看控制台](${BUILD_URL}console)"
sh """curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key='${wxKey}'' -H 'Content-Type: application/json' -d '{ "msgtype": "markdown", "markdown": { "content": "${text}", } }'"""
sh """curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key='${wxKey}'' -H 'Content-Type: application/json' -d '{ "msgtype": "text", "text": { "mentioned_mobile_list":["${noticeTelNumber}"] } }'"""
}
def wxNotice(msg, wxKey, proposerMobile) {
sh """
curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=${wxKey}' \
-H 'Content-Type: application/json' \
-d '
{
"msgtype": "text",
"text": {
"content": "${msg}",
"mentioned_mobile_list":["${proposerMobile}"]
}
}'
"""
}
def fixJavaConfigDataSource(configFile, dbDriver, dbUrl, dbName, dbPassword, helperDialect) {
sh "sed -i 's/helperDialect: .*/helperDialect: ${helperDialect}/g' ${configFile}"
sh "sed -i 's/url: jdbc.*/url: ${dbUrl}/g' ${configFile}"
sh "sed -i 's/driver-class-name: .*/driver-class-name: ${dbDriver}/g' ${configFile}"
sh "sed -i 's/username: .*/username: ${dbName}/g' ${configFile}"
sh "sed -i 's/password: .*/password: ${dbPassword}/g' ${configFile}"
}
def fixJavaConfigYn(configFile, xxlJobIp, xxlJob) {
sh "sed -i 's/nameServers: .*/nameServers: 192.168.61.54:9876/g' ${configFile}"
sh "sed -i 's/addresses.*/addresses: http:\\/\\/'${xxlJobIp}'\\/xxl-job-admin/g' ${configFile}"
sh "sed -i 's/prefix: .*/prefix: ${ENVIRONMENT_NAME}/g' ${configFile}"
sh "sed -i 's/appname:.*/appname: ${xxlJob}/g' ${configFile}"
sh "sed -i 's/businessid: .*/businessid: ${xxlJob}/g' ${configFile}"
sh "sed -i 's/title:.*/title: ${xxlJob}/g' ${configFile}"
sh "sed -i 's/fastjsonType:.*/fastjsonType: fastjson2/g' ${configFile}"
}
def fixEcsUrl(configFile) {
sh "sed -i 's/console:8095/java-console:8095/g' ${configFile}"
}
def fixConsoleUrl(configFile) {
sh "sed -i 's/masterdata-service-url:.*/masterdata-service-url: http:\\/\\/java-ecs:8096\\//g' ${configFile}"
}
def fixJavaConfigRedis(configFile) {
sh "sed -i 's/host: .*/host: redis/g' ${configFile}"
sh "sed -i 's/database: .*/database: 0/g' ${configFile}"
sh "sed -i 's/port: \${redis_port:.*/port: 6379/g' ${configFile}"
sh "sed -i '0,/password:.*/s/password:.*/password: /' ${configFile}"
}
def rancherDeploy() {
try {
sh "rancher kubectl apply -f k8s-Deployment.yml"
} catch (e) {
throw e
}
}
def rancherUpdateDeploy(deploymentName) {
sh """
rancher kubectl rollout restart deployment ${deploymentName} -n ${ENVIRONMENT_NAME}
"""
String updateMsg = sh(returnStdout: true, script: "rancher kubectl rollout status deployment ${deploymentName} -n ${ENVIRONMENT_NAME}").trim()
println updateMsg
if (updateMsg.contains('successfully rolled out')) {
println "${deploymentName} 升级成功"
} else {
throw new Exception(updateMsg)
}
}
def createConfigmap(String configmapName,String fileName){
try{
sh "rancher kubectl delete configmap ${configmapName} -n ${ENVIRONMENT_NAME}"
}catch(ignore){
}
sh "rancher kubectl create configmap ${configmapName} -n ${ENVIRONMENT_NAME} --from-file=${fileName}=${fileName}"
}
def createKubernetesDeployment(NODE_SELECTOR, JAVA_IMAGE_CONSOLE, JAVA_IMAGE_ECS) {
String text = """
apiVersion: apps/v1
kind: Deployment
metadata:
name: java-console
namespace: ${ENVIRONMENT_NAME}
spec:
selector:
matchLabels:
app: java-console
replicas: 1
template:
metadata:
labels:
app: java-console
spec:
nodeSelector:
productLine: ${NODE_SELECTOR}
containers:
- name: java-console
image: ${JAVA_IMAGE_CONSOLE}
imagePullPolicy: Always
ports:
- name: consoleport
containerPort: 8095
env:
- name: JAVA_OPT
value: -Xmx2g -Xms1g -XX:MaxMetaspaceSize=512m -XX:MetaspaceSize=127m
resources:
requests:
memory: 1Gi
limits:
memory: 3Gi
volumeMounts:
- name: logs
mountPath: /target/logs
- name: myfonts
mountPath: /usr/share/fonts/
- name: application-config-volume
mountPath: /application.yml
subPath: application.yml
- name: application-dev-config-volume
mountPath: /application-dev.yml
subPath: application-dev.yml
readinessProbe:
tcpSocket:
port: 8095
initialDelaySeconds: 60
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 20
volumes:
- name: logs
emptyDir: {}
- name: myfonts
persistentVolumeClaim:
claimName: ${ENVIRONMENT_NAME}-pvc
- name: application-config-volume
configMap:
name: console-application-yml
- name: application-dev-config-volume
configMap:
name: console-application-dev-yml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: java-ecs
namespace: ${ENVIRONMENT_NAME}
spec:
selector:
matchLabels:
app: java-ecs
replicas: 1
template:
metadata:
labels:
app: java-ecs
spec:
nodeSelector:
productLine: ${NODE_SELECTOR}
containers:
- name: java-ecs
image: ${JAVA_IMAGE_ECS}
imagePullPolicy: Always
ports:
- name: debugport
containerPort: 8088
- name: ecsport
containerPort: 8096
env:
- name: JAVA_OPT
value: -Xmx3g -Xms1g -XX:MaxMetaspaceSize=512m -XX:MetaspaceSize=127m
- name: XDEBUG
value: -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=8088
resources:
requests:
memory: 2Gi
limits:
memory: 4Gi
volumeMounts:
- name: logs
mountPath: /target/logs
- name: myfonts
mountPath: /usr/share/fonts/
- name: application-config-volume
mountPath: /application.yml
subPath: application.yml
- name: application-dev-config-volume
mountPath: /application-dev.yml
subPath: application-dev.yml
readinessProbe:
tcpSocket:
port: 8096
initialDelaySeconds: 60
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 20
volumes:
- name: logs
emptyDir: {}
- name: myfonts
persistentVolumeClaim:
claimName: ${ENVIRONMENT_NAME}-pvc
- name: application-config-volume
configMap:
name: ecs-application-yml
- name: application-dev-config-volume
configMap:
name: ecs-application-dev-yml
"""
println text
writeFile file: 'k8s-Deployment.yml', text: text, encoding: "UTF-8"
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)