正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

トラブルシューティングスクリプトおよびジョブログ

:を使用するスクリプト内のSyntax is incorrect

スクリプトでコロン(:)を使用すると、GitLabは次のように出力することがあります。

  • Syntax is incorrect
  • script config should be a string or a nested array of strings up to 10 levels deep

たとえば、cURLコマンドの一部として"PRIVATE-TOKEN: ${PRIVATE_TOKEN}"を使用する場合:

pages-job:
  stage: deploy
  script:
    - curl --header 'PRIVATE-TOKEN: ${PRIVATE_TOKEN}' "https://gitlab.example.com/api/v4/projects"
  environment: production

YAMLパーサーは、:がYAMLのキーワードを定義していると判断し、Syntax is incorrectエラーを出力します。

コロンを含むコマンドを使用するには、コマンド全体を一重引用符で囲む必要があります。既存の一重引用符(')を二重引用符(")に変更する必要がある場合があります。

pages-job:
  stage: deploy
  script:
    - 'curl --header "PRIVATE-TOKEN: ${PRIVATE_TOKEN}" "https://gitlab.example.com/api/v4/projects"'
  environment: production

スクリプトで&&を使用してもジョブが失敗しない

&&を使用して2つのコマンドを1つのスクリプト行に結合すると、いずれかのコマンドが失敗した場合でも、ジョブが成功として返される場合があります。例:

job-does-not-fail:
  script:
    - invalid-command xyz && invalid-command abc
    - echo $?
    - echo "The job should have failed already, but this is executed unexpectedly."

2つのコマンドが失敗しても、&&演算子は0の終了コードを返し、引き続きジョブが実行されます。どちらかのコマンドが失敗した場合にスクリプトを強制的に終了させるには、行全体を括弧で囲みます。

job-fails:
  script:
    - (invalid-command xyz && invalid-command abc)
    - echo "The job failed already, and this is not executed."

折り畳まれたYAML複数行スカラーによって複数行コマンドが保持されない

- >折りたたみYAML複数行ブロックスカラーを使用して長いコマンドを分割すると、追加のインデントにより、行が個々のコマンドとして処理されます。

例:

script:
  - >
    RESULT=$(curl --silent
      --header
        "Authorization: Bearer $CI_JOB_TOKEN"
      "${CI_API_V4_URL}/job"
    )

この場合、インデントによって改行が保持されるため、失敗します。

$ RESULT=$(curl --silent # collapsed multi-line command
curl: no URL specified!
curl: try 'curl --help' or 'curl --manual' for more information
/bin/bash: line 149: --header: command not found
/bin/bash: line 150: https://gitlab.example.com/api/v4/job: No such file or directory

次のいずれかの方法でこれを解決します。

  • 余分なインデントを削除します。

    script:
      - >
        RESULT=$(curl --silent
        --header
        "Authorization: Bearer $CI_JOB_TOKEN"
        "${CI_API_V4_URL}/job"
        )
  • シェルの行継続を使用するなど、余分な改行が処理されるようにスクリプトを変更します。

    script:
      - >
        RESULT=$(curl --silent \
          --header \
            "Authorization: Bearer $CI_JOB_TOKEN" \
          "${CI_API_V4_URL}/job")

ジョブログ出力が期待通りにフォーマットされていない、または予期しない文字が含まれている

色付けやフォーマットにTERM環境変数を使用するツールでは、ジョブログのフォーマットが正しく表示されないことがあります。たとえば、mypyコマンドの場合:

出力例

GitLab Runnerは、コンテナのシェルを非対話モードで実行するため、シェルのTERM環境変数がdumbに設定されます。これらのツールのフォーマットを修正するには、以下を実行します。

  • コマンドを実行する前に、シェルの環境でTERM=ansiを設定するための別のスクリプト行を追加します。
  • 値がansiTERMCI/CD変数を追加します。

after_scriptセクションの実行が早期に停止し、$CI_JOB_STATUSの値が正しくない

GitLab Runner 16.9.0から16.11.0: