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
,无论任务失败还是成功。
这个实验应该有助于调试:
- 强制失败作业:在
begin.sh
末尾添加一个exit 1
- 劫持作业:
fly -t <target> i -j <pipeline>/<job>
-> select run-script
cd ./run-git; /bin/bash begin.sh
- 确保 luigi 配置存在并且 named appropriately,例如
luigi.cfg
- 重新运行命令:
LUIGI_CONFIG_PATH=luigi.cfg bash ./begin.sh
- 检查输出:
echo $?
我有一个测试管道与一个工作 运行 是一组 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
,无论任务失败还是成功。
这个实验应该有助于调试:
- 强制失败作业:在
begin.sh
末尾添加一个 - 劫持作业:
fly -t <target> i -j <pipeline>/<job>
-> selectrun-script
cd ./run-git; /bin/bash begin.sh
- 确保 luigi 配置存在并且 named appropriately,例如
luigi.cfg
- 重新运行命令:
LUIGI_CONFIG_PATH=luigi.cfg bash ./begin.sh
- 检查输出:
echo $?
exit 1