トラブルシューティング
このガイドは、Plexrを使用する際の一般的な問題の診断と修正に役立ちます。
よくある問題
インストールの問題
Goモジュールエラー
問題: go: module github.com/plexr/plexr: git ls-remote -q origin が失敗する
解決策:
# モジュールキャッシュをクリア
go clean -modcache
# 依存関係を再ダウンロード
go mod downloadインストール中の権限拒否
問題: go install実行時にpermission denied
解決策:
# ユーザーのbinディレクトリにインストール
go install github.com/plexr/plexr/cmd/plexr@latest
# またはsudoを使用(推奨されません)
sudo go install github.com/plexr/plexr/cmd/plexr@latest設定の問題
プランファイルが見つからない
問題: Error: plan file not found: plan.yml
解決策:
- 正しいディレクトリにいることを確認
- ファイル名のスペルをチェック(plan.yml vs plan.yaml)
-fフラグを使用してカスタムパスを指定:bashplexr execute -f path/to/myplan.yml
無効なYAML構文
問題: Error: failed to parse plan: yaml: line X
解決策:
- オンラインバリデーターを使用してYAML構文を検証
- 一般的な問題をチェック:
- 不正なインデント(タブではなくスペースを使用)
- キーの後のコロンの欠落
- 引用符で囲まれていない特殊文字
正しい構文の例:
version: "1.0"
name: "マイプラン"
steps:
- name: "ステップ1" # 引用符と適切なインデントに注意
command: "echo hello"実行の問題
"コマンドが見つかりません"でステップが失敗する
問題: bash: command: command not found
解決策:
- コマンドがインストールされ、PATHにあることを確認
- カスタムスクリプトには絶対パスを使用:yaml
steps: - name: "スクリプトを実行" command: "./scripts/my-script.sh" # 相対パス # または command: "/home/user/project/scripts/my-script.sh" # 絶対パス
タイムアウトエラー
問題: Error: step timed out after 60s
解決策:
steps:
- name: "長時間実行タスク"
command: "./long-task.sh"
timeout: 300 # タイムアウトを5分に増加作業ディレクトリの問題
問題: Error: no such file or directory
解決策:
steps:
- name: "サブディレクトリでビルド"
command: "make build"
workdir: "./src" # 作業ディレクトリを指定状態管理の問題
変数が見つからない
問題: Error: variable 'myvar' not found in state
解決策:
- 使用前に変数が設定されていることを確認:yaml
steps: - name: "変数を設定" command: "echo 'value'" outputs: - name: myvar from: stdout - name: "変数を使用" command: "echo `{{.myvar}}`" # これで存在します
状態ファイルの破損
問題: Error: failed to load state: invalid character
解決策:
# 状態をリセット
plexr reset
# または手動で状態ファイルを削除
rm .plexr/state.json依存関係の問題
循環依存
問題: Error: circular dependency detected
解決策: ステップの依存関係を確認し、サイクルを削除:
# 悪い例 - 循環依存
steps:
- name: "A"
depends_on: ["B"]
- name: "B"
depends_on: ["A"]
# 良い例 - サイクルなし
steps:
- name: "A"
- name: "B"
depends_on: ["A"]ステップが予期せずスキップされる
問題: 依存関係が満たされているのにステップが実行されない
解決策: 条件を確認:
steps:
- name: "条件付きステップ"
command: "deploy.sh"
condition: "`{{.environment}}` == 'production'"
# environmentが"production"に設定されていない限り実行されませんデバッグのヒント
詳細なロギングを有効化
# 詳細な実行情報を表示
plexr execute -v
# さらに詳細を表示
plexr execute -vv実行計画を確認
# 実行せずに検証
plexr validate
# 実行順序を表示
plexr status --show-order状態を検査
# 現在の状態を表示
plexr status
# 状態ファイルを直接表示
cat .plexr/state.json | jq個別のステップをテスト
# ステップにテストモードを追加
steps:
- name: "デプロイ"
command: |
if [ "$TEST_MODE" = "true" ]; then
echo "本番環境にデプロイします"
else
./deploy.sh
fi
env:
TEST_MODE: "`{{.test_mode | default \"false\"}}`"環境固有の問題
Dockerコンテナの問題
問題: Dockerで実行するとステップが失敗する
解決策:
必要なボリュームをマウント:
dockerfiledocker run -v $(pwd):/workspace plexr execute作業ディレクトリを設定:
yamlsteps: - name: "コンテナでビルド" command: "make build" workdir: "/workspace"
CI/CDパイプラインの失敗
問題: Plexrはローカルで動作するがCIで失敗する
解決策:
- 環境変数が設定されていることを確認
- すべての依存関係がインストールされていることを確認
- 明示的なパスとバージョンを使用:yaml
steps: - name: "CIビルド" command: "/usr/local/go/bin/go build" env: GOPATH: "/home/runner/go"
パフォーマンスの問題
実行が遅い
解決策:
独立したステップを並列で実行:
yamlsteps: - name: "並列タスク" parallel: - name: "テスト1" command: "test1.sh" - name: "テスト2" command: "test2.sh"依存関係をキャッシュ:
yamlsteps: - name: "依存関係をインストール" command: "npm ci" condition: "`{{.deps_cached}}` != 'true'"
高メモリ使用量
解決策: 大きなコマンドの出力キャプチャを制限:
steps:
- name: "大きな出力"
command: "find / -name '*.log'"
capture_output: false # 状態に保存しないヘルプを得る
診断情報を収集
# システム情報
plexr version
go version
uname -a
# プラン検証
plexr validate -v
# 実行トレース
plexr execute -vv 2>&1 | tee plexr-debug.log問題を報告
問題を報告する際は、以下を含めてください:
- Plexrバージョン(
plexr version) - プランファイル(機密データを削除したもの)
- エラーメッセージとログ
- 再現手順
問題を報告する場所: https://github.com/plexr/plexr/issues
FAQ
Q: プランファイルで環境変数を使用できますか? A: はい、環境変数には${VAR_NAME}を、状態変数には{{.var_name}}を使用します。
Q: シークレットをどのように扱いますか? A: 環境変数を使用し、プランファイルにシークレットをコミットしないでください。
Q: Plexrをバックグラウンドで実行できますか? A: はい: nohup plexr execute > plexr.log 2>&1 &
Q: Plexrをアップデートするにはどうすればよいですか? A: go install github.com/plexr/plexr/cmd/plexr@latestを実行