覚えておいてください: gitlab ci runner & pipefail == 痛い
gitlab-ci.yaml スクリプトで意味をなさない奇妙なエラーはありますか?多分それらはパイプを使用していますか?ガチャ.
Gitlab にはデフォルトでかなりの 'anal' pipefail bash モードが失敗しますが、これは通常 "set -e"を使用しても通常は見られません ...
たとえば、CI 内の特定のファイルを特定のバイトサイズに切り捨て、次のスクリプト パターンを使用したいと考えました.
興味深いことに、大きなファイルがヘッド カットオフよりも大幅に大きくなると、このコマンドは常に CI スクリプトに失敗していました.
完全なラージファイルが完了する前にダウンストリーム プロセスが終了するため、cat は実際に失敗することが判明しました.
自分で試してみてください:
Gitlab にはデフォルトでかなりの 'anal' pipefail bash モードが失敗しますが、これは通常 "set -e"を使用しても通常は見られません ...
たとえば、CI 内の特定のファイルを特定のバイトサイズに切り捨て、次のスクリプト パターンを使用したいと考えました.
- cat /path/to/largefile | head -c 131200 > /path/to/truncfile
興味深いことに、大きなファイルがヘッド カットオフよりも大幅に大きくなると、このコマンドは常に CI スクリプトに失敗していました.
完全なラージファイルが完了する前にダウンストリーム プロセスが終了するため、cat は実際に失敗することが判明しました.
自分で試してみてください:
$ $ dd if=/dev/random of=/tmp/largefile bs=1M count=3
3+0 records in
3+0 records out
3145728 bytes (3,1 MB, 3,0 MiB) copied, 0,0467213 s, 67,3 MB/s
# here how it works nicely, with return code 0
$ cat /tmp/largefile | head 1024 > /tmp/truncfile
$ echo $?
0
# ... now set pipefail mode it fails ...
$ set -o pipefail
$ cat /tmp/largefile | head -c 1024 > /tmp/smallfile
$ echo $?
141
Reference
この問題について(覚えておいてください: gitlab ci runner & pipefail == 痛い), 我々は、より多くの情報をここで見つけました https://dev.to/asacasa/remember-gitlab-ci-runner-pipefail-36eテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol