首页 > 其他分享 >jenkins 自动化部署 flink job

jenkins 自动化部署 flink job

时间:2023-06-14 18:23:32浏览次数:40  
标签:remote flink steps job flinkContainerName jenkins def stage

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

 

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

 

标签:remote,flink,steps,job,flinkContainerName,jenkins,def,stage
From: https://www.cnblogs.com/LcxSummer/p/17481012.html

相关文章

  • Flink 的 checkpoint 机制对比 spark 有什么不同和优势?
    sparkstreaming的checkpoint仅仅是针对driver的故障恢复做了数据和元数据的checkpoint。而flink的checkpoint机制要复杂很多,它采用的是轻量级的分布式快照,实现了每个算子的快照,及流动中的数据的快照。......
  • jenkins 上传文件参数
    注意:文件参数不支持Jenkins流水线文件上传以后会上传至workspace里对应的project下面,但是文件会被重命名为Filelocation(设置路径)输入库的值,如果在jenkins中继续读取该文件,可以在使用内置变量WORKSPACE......
  • kettle和Flink做ETL的区别
    Kettle和Flink都可以用于ETL(抽取、转换和加载)处理,但它们有一些不同之处。Kettle是一款基于图形化界面的ETL工具,可以通过拖放组件的方式来设计和构建ETL流程。它提供了大量的内置组件和步骤,可以用于处理各种数据源和格式。Kettle的优点是易于使用和学习,适合于小型数据处理任务和快......
  • Linux(centos 7.5)安装Jenkins
    文章目录一、Jenkins软件安装1、Jenkins需要依赖JDK,所以先安装JDK1.82、Linux安装Gitlab3、下载Jenkins安装包4、安装Jenkins5、修改Jenkins配置6、启动Jenkins二、Jenkins简单配置1、打开浏览器访问2、获取并输入admin账户密码3、跳过插件安装4、添加一个管理员账户,并进入Jenkin......
  • 聊聊Flink必知必会(二)
    Checkpoint与BarrierFlink是一个有状态的流处理框架,因此需要对状态做持久化,Flink定期保存状态数据到存储空间上,故障发生后从之前的备份中恢复,这个过程被称为Checkpoint机制。而Checkpoint为Flink提供了Exactly-Once的投递保障。流处理是一个数据不断输入的过程,为了更好更方便的......
  • Docker 部署jenkins及项目
    本文主要记录如何通过docker安装jenkins,并且通过jenkins部署项目,最终效果是只要在jenkins对某个项目点击构建,jenkins就会去gitLab上拉取最新项目的最新代码,然后根据你自己项目的pom.xml文件,把项目打包成jar,并且自动把这个最新的jar运行起来,达到一键式构建的目标。1、操作1)服务......
  • flink 源代码启动
    Flink源码编译启动 背景纯小白新手入门flink,由于自身基础差底子薄,启动个源码各种查资料找资源,终于启动好了值得记录一下,本文源码启动是基于idea+jdk8+maven在windows上启动flink1.16源码。(1)下载源码源码地址:https://github.com/apache/flink/tree/release-1.16(2)项目编译首先......
  • jenkins学习
    jenkins学习与实战转载:https://blog.csdn.net/qq_41539088/article/details/124736892我们将使用jenkins完成三个最为重要和基础的功能拉取远程git库的代码到本地使用编译工具本地编译拉取到的代码将编译的结果部署到指定的机器上 ......
  • Jenkins Pipeline 密钥实现远程部署
    前提:已配置jenkins秘钥凭证 一、配置流程1.1片段生成1、按如下图选择2、新增密钥信息1.2脚本配置以上配置完成后,接下来就可以在Jenkinsfile中配置了,:stages{stage('xx启动'){steps{echo"xx启动"dir("${SRC_PATH}")......
  • Jenkins 凭证管理 - 看这一篇就够了~
    许多三方网站和应用可以与Jenkins交互,如Artifact仓库,基于云的存储系统和服务等.在Jenkins中添加/配置credentials,Pipeline项目就可以使用credentials与三方应用交互Credential类型参考:jenkins.io/zh/doc/book…Jenkins可以存储以下类型的credentials:Secrettext-APItoken......