Luigi 不会向大厅发送错误代码 ci

Luigi does not send error codes to concourse ci

我有一个测试管道与一个工作 运行 是一组 luigi 任务。我的问题是:luigi 任务中的失败不会上升到 concourse 工作。换句话说,如果 luigi 任务失败,concourse 将不会记录该失败并声明 concourse 作业已成功完成。我会先 post 我正在 运行ning 的代码,然后是我尝试过的解决方案。

路易吉-tasks.py

class Pipeline1(luigi.WrapperTask):
    def requires(self):
        yield Task1()
        yield Task2()
        yield Task3()

tasks.py

class Task1(luigi.Task):
    def requires(self):
        return None

    def output(self):
        return luigi.LocalTarget('stuff/task1.csv')

    def run(self):
        #uncomment line below to generate task failure
        #assert(True==False)
        print('task 1 complete...')
        t = pd.DataFrame()
        with self.output().open('w') as outtie:
            outtie.write('complete')

# Tasks 2 and 3 are duplicates of this, but with 1s replaced with 2s or 3s.

配置文件

[retcode]
# codes are in increasing level of severity (for most applications)
already_running=10
missing_data=20
not_run=25
task_failed=30
scheduling_error=35
unhandled_exception=40

begin.sh

#!/bin/sh
set -e
export PYTHONPATH='.' 
luigi --module luigi-tasks Pipeline1 --local-scheduler
echo $?

pipeline.yml

# <resources, resource types, and docker image build job defined here>

#job of interest
- name: run-docker-image
  plan:
  - get: timer
    trigger: true
  - get: docker-image-ecr
    passed: [build-docker-image]
  - get: run-git
  - task: run-script
    image: docker-image-ecr
    config:
      inputs:
      - name: run-git
      platform: linux
      run:
        dir: ./run-git
        path: /bin/bash 
        args: ["begin.sh"]

我在几个方面引入了错误:assertions/raising 单个任务的 运行() 方法和包装器中的异常 (ValueError),以及 sys.exit(luigi.retcodes.retcode().unhandled_exception).我也试过失败所有任务。我这样做是为了防止需要在特定 manner/location 中生成错误。尽管它们都产生了失败的任务,但其中 none 个在大厅服务器中产生了错误。

起初,我认为如果 concourse 可以 运行 分配给它的文件或命令,它就会成功。不过,我不确定它是否那么简单。有趣的是,当我 运行 本地计算机上的管道 (luigi --modules luigi-tasks Pipeline1 --local-scheduler) 时,我得到了适当的 return 代码(例如 30),但是当我 运行 大厅内的管道时服务器,我在 luigi 任务完成后得到一个 return 代码 0(来自 bash 脚本中的 echo $?)。

非常感谢对此问题的任何见解。

我怀疑 luigi 没有看到带有 return 代码的配置文件。它的默认行为是 return 0,无论任务失败还是成功。

这个实验应该有助于调试:

  1. 强制失败作业:在begin.sh
  2. 末尾添加一个exit 1
  3. 劫持作业:fly -t <target> i -j <pipeline>/<job> -> select run-script
  4. cd ./run-git; /bin/bash begin.sh
  5. 确保 luigi 配置存在并且 named appropriately,例如luigi.cfg
  6. 重新运行命令:LUIGI_CONFIG_PATH=luigi.cfg bash ./begin.sh
  7. 检查输出:echo $?