当前位置: 首页 > 知识库问答 >
问题:

在CI管道中部署数据流

任飞鸣
2023-03-14

我使用beam SDK用python编写了一个Google数据流管道。有一些文档介绍了我如何在本地运行它,并设置runner标志以在数据流上运行它。

我现在正尝试将其自动部署到CI管道(bitbucket管道,但并不真正相关)。有关于如何“运行”管道的文档,但没有真正的“部署”管道。我测试过的命令如下:

python -m dataflow --runner "DataflowRunner" \
                   --jobName "<jobName>" \
                   --topic "<pub-sub-topic"" \
                   --project "<project>" \
                   --dataset "<dataset>" \
                   --worker_machine_type "n1-standard-2" \
                   --temp_location "gs://<bucket-name>/tmp/"

这将运行作业,但因为它正在流式传输,所以永远不会返回。它还在内部管理打包并推送到存储桶。我知道如果我杀死那个进程,它会继续运行,但是在CI服务器上设置它,以便我可以检测进程是否真的成功,或者我只是在超时后杀死它是很困难的。

这看起来很荒谬,似乎我遗漏了一些明显的东西,但我如何在数据流上打包和运行这个模块,以使我能够可靠地知道它是从CI管道部署的?

共有2个答案

查宜民
2023-03-14

扩展Jamielennox的答案。

在本地开发环境的直接运行器上时,您希望看到管道无限期运行;可能只是在一段时间后使用Ctrl-C手动取消。

在部署管道以在GCP的数据流上运行时,您希望脚本部署作业并结束。

runner_name = pipeline_options.get_all_options().get('runner')

if runner_name == 'DirectRunner':
    with beam.Pipeline(options=pipeline_options) as pipeline:
        _my_setup_pipeline(config, pipeline, subscription_full_name)

elif runner_name == 'DataflowRunner':
    pipeline = beam.Pipeline(options=pipeline_options)
    _my_setup_pipeline(config, pipeline, subscription_full_name)
    pipeline.run()

else:
    raise Exception(f'Unknown runner: {runner_name}')
归翔
2023-03-14

是的,这是一件愚蠢的事情。

基本上当你使用

with beam.Pipeline(options=options) as p: 

语法,它在幕后调用wait_until_finish。所以等待在我没有意识到的情况下被调用,导致它永远停留。重构以删除上下文管理器解决了这个问题。

 类似资料:
  • 我尝试用gitlab ci构建并推送我的react build文件夹。yml构建和测试通过,但部署失败,出现以下错误:如果我在语言环境文件中使用相同的脚本,它就会工作! 这是我的all yml文件:

  • 我对gitlab ci子管道有问题。需要在具有多个应用程序的repo中的每次提交后自动触发ci管道。需要配置以检测哪些文件夹/文件被修改,以便知道要触发哪个应用程序管道 结构示例 Main“.gitlab ci.yml”是: appA1".gitlab-ci.yml"是: appA2“.gitlab ci.yml”是: 这种配置的目的是,例如,当我在应用**中更改文件时,管道会检测到更改并生成应用

  • 我试图通过jenkins管道将azure web应用程序部署到azure form git 代码如下所示 这怎么可能?有什么方法可以将git repo url作为参数提供给azure插件吗? 谢了!

  • 我正在尝试部署一个现有的。Net核心应用程序,通过创建构建和发布管道来使用Azure Devops。构建管道工作正常,但我在运行发布管道(在部署Azure App Service下)时收到以下错误。 错误:未找到具有指定模式的包:D:\a\r1\a***. zip 检查任务中提到的包是作为构建中的工件发布还是作为前一阶段发布并在当前作业中下载。 应该做些什么来解决这个问题?

  • 在我的CI管道中,我正在生成一个工件,它可视化了我的代码的某些方面。在后面的步骤中,我想从CI管道中将其提交到存储库。这是: 当管道在gitlab中运行时,它会出现以下故障: $git config user。电子邮件“cipipeline@dhgitlab.dunnhumby.co.uk“ $git config user.name”CI Pipeline“ $cd/group/project

  • 我正在尝试使用代码构建操作在AWS代码管道上部署AWS CDK应用程序。 构建和部署在本地完美工作(因为它会!)但是在CodeBuild上运行时,命令失败 这很可能是一些琐碎的事情,但我却在挠头,想弄明白是什么! 项目结构是自动生成的(使用) 对于阶段是 是(此阶段的输入目录是阶段的工件,即目录) 阶段抛出cdk ls步骤中的错误。由于上面的构建/部署步骤在本地工作(在干净的签出中),我怀疑这可能