4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

夏の終わりの怖い話:Argument list too long(前編)

Last updated at Posted at 2019-09-13

ある日、circle CIのジョブでエラーが出たんですよ。数千のファイルを削除するコミットで走ったジョブでした。

(EDITED)/root.sh: line 2: /usr/bin/dirname: Argument list too long

そりゃあ仕事ですからね、億劫ですがすぐにrerun job with SSHしましたよ。といっても例の如く10分ぐらい待たされるんですが。で、ログインしてジョブを手動で動かしても同じエラーが出る。スクリプトを見てみましたがなーんの変哲もないスクリプトなんですよ。ただレポジトリのルートディレクトリをとっているだけ。

repository_root() {
    local cwd=$(cd $(dirname ${BASH_SOURCE[0]}) && pwd)
	echo "${cwd}/../../.."
}

このdirname ${BASH_SOURCE[0]}Argument list too longエラーになるらしいんです。そりゃあすぐにecho ${BASH_SOURCE[0]}してみましたよ。でも(EDITED)/root.shと出るだけです。

いやだな、こわいなと思いつつ、仕事ですからね、set -xいれてどういう引数を受け取っているか見ようとしたんですよ。

自分の目が信じられませんでした。

+++ repository_root
++++ dirname (EDITED)/root.sh
(EDITED)/root.sh: line 5: /usr/bin/dirname: Argument list too long
+++ echo /../../..

しかもそのすぐ上に同じくこの関数を呼び出していたんです。

+++ repository_root
++++ dirname (EDITED)/root.sh
+++ echo (EDITED)/../../..

もう気がおかしくなりそうになりながらroot.shを修正しました。shell parameter expansionすれば流石に大丈夫だろうと思いましてね。

repository_root() {
    echo "${BASH_SOURCE[0]%/*}/../../.."
}

もう一度ジョブを走らせるとdirnameの部分はパスしたようです。ほっと一息ついたのも束の間でした。

次の瞬間私の目に飛び込んできたのは

+++ echo
+++ grep git
(EDITED)/git.sh: line 6: /bin/grep: Argument list too long
++ '[' '!' -z '' ']'
++ source ci.sh
+++ ENV1=
++++ echo
++++ grep ci
(EDITED)/ci.sh: line 4: /bin/grep: Argument list too long
+++ '[' '!' -z '' ']'
+++ ENV2=
++++ echo
++++ grep job
(EDITED)/ci.sh: line 8: /bin/grep: Argument list too long
+++ '[' '!' -z '' ']'
+++ '[' '!' -z '' ']'
+++ GIT_USER_NAME=username
+++ GIT_USER_MAIL=mail@addre.ss
+++ git config user.name $GIT_USER_NAME
(EDITED)/ci.sh: line 32: /usr/bin/git: Argument list too long

うわあああああああああ!!!!!

too longなリストはこのコミットで消された数千のファイル達でしょうか。誰か助けてください。そしてビルドを通してく

テープはここで終わっている。

やれやれ。失踪した前任者の行方とビルドが失敗する原因の手がかりはたったこれだけか。
しかししょうがない。これも仕事だからな。俺は早速この問題に取りかかった。
後編に続く

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?