Python Script Not Showing Output in CI/CD
Posted on
I'm running a Python script in my Gitlab CI/CD pipeline, and it basically looks like this:
if __name__ == "__main__":
errors = do_thing("file.yml")
if errors:
print("The following errors were found:")
for error in errors:
print(f"- {error}")
os._exit(1)
else:
print("File is looking good!")
os._exit(0)
And the gitlab-ci.yml:
stages:
- build
validate file:
stage: build
image: python:3.11
script:
- python3 ./scripts/check.py
If there are any errors they won't get shown before the pipeline fails.
This can be fixed by setting the environment variable PYTHONUNBUFFERED to true or using the -u flag:
stages:
- build
validate file:
stage: build
image: python:3.11
script:
- python3 -u ./scripts/check.py
The explanation is that it "forces the stdout and stderr streams to be unbuffered".