groovy 脚本实例 创建ConfigMap

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"

}

posted @   liwenchao1995  阅读(53)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示