jenkins 自动化部署 flink job

Jenkinsfile

def deployIp = '192.168.1.53'

def remote = [:]
remote.name = deployIp
remote.host = deployIp
remote.user = 'root'
remote.password = LCX_PWD_5s
remote.allowAnyHosts = true

def gitUrl = 'http://192.168.1.43:8600/bigdata/flink-streaming.git'
def gitBranch = 'lcx-20230208'

def jarPath = 'target'
def propertiesPath = 'src/main/resources'

def jarName = 'flink-streaming-1.0-SNAPSHOT.jar'
def propertiesName = 'app-gas-4s.properties'

def deployPath = '/lcx/kafka2ck-gas-4s'
def flinkPath = '/opt/flink/gas-4s'

def flinkContainerName = 'data_jobmanager_1'
def className = 'com.gmr.cloud.streaming.source.NewGasGaeStreaming'
def jobName = 'kafka2ck_gae_4s'

pipeline {
    agent any

    stages {
        stage('pull code') {
            steps {
                checkout([$class: 'GitSCM', branches: [[name: "*/${gitBranch}"]], extensions: [], userRemoteConfigs: [[credentialsId: LCX_GIT_AUTH_ID, url: gitUrl]]])
            }
        }
        stage('package') {
            steps {
                sh """
                    mvn clean package -Dmaven.test.skip=true
                """
            }
        }
        stage('scp') {
            steps {
                sh """
                    scp ${jarPath}/${jarName} root@${deployIp}:${deployPath}/
                    scp ${propertiesPath}/${propertiesName} root@${deployIp}:${deployPath}/
                """
            }
        }
        stage('docker cp') {
            steps {
                sshCommand remote: remote, command: """
                    cd ${deployPath}
                    docker cp ${jarName} ${flinkContainerName}:${flinkPath}/
                    docker cp ${propertiesName} ${flinkContainerName}:${flinkPath}/
                """
            }
        }
        stage('flink stop') {
            steps {
                sshCommand remote: remote, command: """
                    docker exec -i ${flinkContainerName} flink list | grep ${jobName} | awk '{print \$4}' | xargs -n1 docker exec -i ${flinkContainerName} flink cancel
                """
            }
        }
        stage('flink run') {
            steps {
                sshCommand remote: remote, command: """
                    cd ${deployPath}
                    rm -rf start.log
                    nohup docker exec -i ${flinkContainerName} flink run -c ${className} ${flinkPath}/${jarName} ${flinkPath}/${propertiesName} >${deployPath}/start.log 2>&1 &
                    sudo ls
                """
            }
        }
    }
}

 

第一个坑:flink run 执行后 jenkins 任务一直不结束

在linux命令行运行 flink run ,的确命令不会退出,然后我在命令结尾处加了 & 符号,命令行看样子是退出了,于是我直接改 Jenkinsfile ,再次构建,构建任务依然无法结束

 最后我自己手动结束了构建任务

 

 

回到命令行又试了一次,发现很奇怪的现象,上面的命令输入后,虽然很快就退出了,但是接下来不管我再输入一行什么任何其他命令,命令的结尾都会显示已停止字样,

 虽然不知道为什么会这样,但是我想我需要在 Jenkinsfile 这行命令的后面任意的再加一行其他无关紧要的命令,才能让构建任务顺利退出

果然,多加一行 ls 命令后,jenkins 构建任务成功结束了

坑二:停止 job 的命令总是报错

 日志总是提示 $ 符号用的不对,改成 \$ 也还是报错,一直不懂为啥其他地方可以用 ${} 而这里不能用,最后仔细的看了下错误提示,发现好像是让我注意转义 $ 符号,用百度翻译后,发现的确是提示我注意 $ 符号要转义,只是他提示我的地方不对,真正有问题的是 $4 这个地方,应该写成 \$4

 

这个坑谁也怪不了,只能怪自己英文不好

 

posted @ 2023-06-14 18:09  1156740846  阅读(170)  评论(0编辑  收藏  举报