DevOpsのトラブルシューティング

トラブルシューティング情報を使用して、DevOpsサービスの操作中に発生する可能性のある一般的な問題を特定し、対処します。

  • OKEへのアプリケーションのデプロイ: Kubernetes Engine (OKE)クラスタにアプリケーションをデプロイしようとしたときに発生する可能性のある問題を解決します。
  • 脆弱性監査の失敗: ビルド・パイプラインからコード・スキャンを開始したときに起こりうる問題を解決します。
  • プライベート接続の構成: プライベートに格納されているソース・コードへのアクセスを設定するときに発生する可能性のある問題を修正します。

OKEへのアプリケーションのデプロイ

様々なエラーのため、Kubernetesマニフェストの適用ステップが失敗します。

認可エラー:

クラスタが存在しないか、コンパートメント内の他のOracle Cloud Infrastructure (OCI)リソースへのパイプライン・リソース・アクセスを提供する動的グループおよびポリシーが存在しません。

関連するOCIリソースが存在し、OCI DevOpsデプロイ・パイプライン・リソースに対して動的グループが作成され、関連するOCIリソースにその動的グループがアクセスできるポリシーが存在するかどうかを確認します。

たとえば、デプロイメント・パイプラインの動的グループを作成します。動的グループにDeployDynamicGroupという名前を付け、compartmentOCIDを実際のコンパートメントのOCIDに置き換えます: All {resource.type = 'devopsdeploypipeline', resource.compartment.id = 'compartmentOCID'}

動的グループがすべてのリソースにアクセスすることを許可するIAMポリシーを作成します: Allow dynamic-group DeployDynamicGroup to manage all-resources in compartment <compartment_name>

DevOps IAMポリシーを参照してください。

プロトコル・フィールドの欠落:

次のエラー・メッセージが表示される場合があります: io.kubernetes.client.openapi.ApiException: class V1Status { apiVersion: v1 code: 500 details: null kind: Status message: failed to create typed patch object: .spec.template.spec.containers[name=\"helloworld\"].ports: element 0: associative list with keys has an element that omits key field \"protocol\" metadata: class V1ListMeta { _continue: null remainingItemCount: null resourceVersion: null selfLink: null } reason: null status: Failure }

Kubernetesマニフェストには、コンテナ・ポートが定義されている場合は常にプロトコル・フィールドが必要です。

この問題は、1.20未満のクラスタ・バージョンのKubernetesサーバー側の適用に関する既存のバグです。詳細は、問題130および92332を参照してください。

コンテナ・ポートが定義されている場合は常にプロトコル・フィールドを追加します。

ソケット・タイムアウト:

エラー・メッセージ: io.kubernetes.client.openapi.ApiException: java.net.SocketTimeoutException: connect timed out

このエラーは、Kubernetesパブリック・エンドポイントにアクセスまたは接続できない場合に発生することがあります。

Kubernetes APIエンドポイントは、有効な接続可能アドレスである必要があります。有効なパブリックIPエンドポイントについては、クラスタのネットワーク構成を確認する必要があります。を参照してください。

タイムアウトのため、デプロイメント・ステータスが失敗します:

これは、Kubernetesのデプロイメント時間が進行状況の期限を超えた場合に発生する可能性があります。

デフォルトでは、Kubernetesの進行状況の期限は600秒です。進行状況の期限(秒)を参照してください。

K8sデプロイメントのポッドが期限内に正常にロールアウトされない場合、このエラー・メッセージがデプロイメント・ログに表示されます。詳細は、失敗したデプロイメントを参照してください。

クラスタ上のこれらのポッドのログを確認します。

脆弱性監査の失敗

VulnerabilityAuditステップが「マネージド・ビルド」ステージで失敗します。

無効なpom.xmlファイル構成またはpom.xmlファイルを処理するクライアントJARの失敗:

アプリケーション依存性管理(ADM) MavenクライアントJARが、無効なpom.xmlファイル構成のため、またはpom.xmlファイルを処理するクライアントJARの失敗のため、部品構成表(BOM) (VulnerabilityAuditステップを作成するためのペイロード)の作成に失敗します。

  1. pom.xmlファイルを修正および検証します。
  2. サービス・リクエストをオープンします。

VulnerabilityAuditステップのタイムアウトまたは失敗:

VulnerabilityAuditステップが作成されますが、VulnerabilityAuditステップのタイムアウトまたは失敗のため、正常な最終ステータスに達しません。

失敗のサービス・リクエストをオープンします。

検証エラー:

ビルド仕様ファイルに間違ったknowledgeBaseIdまたはvulnerabilityCompartmentIdが入力されると、検証エラーが発生する可能性があります。

ビルド仕様ファイルに指定されている値を確認します。

IAMポリシーが定義されていません:

ビルド・パイプラインがADMリソースにアクセスできるようにポリシーが定義されていない場合、VulnerabilityAuditステップが失敗することがあります。

ADMリソースにアクセスするためのポリシーを定義します。

サーバー・エラー:

断続的な停止が原因でサービス・エラーが発生する可能性があります。

サービス・リクエストをオープンします。

プライベート接続の構成

ビルド実行が様々なステップで一貫して失敗します。

ビルド実行が「プライベート・アクセスのプロビジョニング」ステップで失敗します:

subnetIdまたはnsgIdが認証されていないか、見つからないため、プライベート・アクセスの設定に失敗したという内容のエラー・メッセージが表示される場合があります。

これは、Identity and Access Management (IAM)ポリシーが正しくない場合、または構成中に指定されたsubnetIdまたはnsgIdの値が無効である場合に発生する可能性があります。

エラーの原因に応じて、次のいずれかの解決策を検討できます:

  1. 正しいIAMポリシーを記述します。ポリシーの例は、ビルド・ポリシーを参照してください。
  2. subnetIdおよびnsgIdの値が正しいかどうかを確認します。

ビルド実行が「ソフトウェア環境の設定」ステップで一貫して失敗します:

ビルド・ソース<source>およびcaBundleId <Oracle Cloud Identifier (OCID) of ca bundle>の証明書バンドルを証明書サービスからフェッチできないというメッセージが表示される場合があります。

これは、証明書にアクセスするためのビルド・パイプラインのIAMポリシー設定が正しくない場合、または接続リソースで間違ったcaBundleIdを構成した場合に発生する可能性があります。

エラーの原因に応じて、次のいずれかの解決策を検討できます:

  1. 正しいIAMポリシーを記述します。ポリシーの例は、ビルド・ポリシーを参照してください。
  2. 外部接続リソースでcaBundleIdを確認して修正します。

ビルド実行が「ソースのダウンロード」ステップで一貫して失敗します:

URLが正しい場合、およびリポジトリ・サーバーが自己署名証明書をインストールしている場合は、接続リソースのTLSVerifyConfigurationを確認してください。

別の原因として、SSL証明書が不明なリポジトリ・サーバーを構成している可能性があります。

指定されたステップに従って、外部接続リソースでTransport Layer Security (TLS)検証を構成します:

  1. 次を使用して認証局(CA)証明書を取得します: echo -n | openssl s_client -connect <host>:<port> | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ca.pem
  2. 証明書をCAバンドル・リソースにアップロードします。
  3. 外部接続リソースの作成時に、作成されたCAバンドル・リソースを選択してTLSVerifyConfigurationを構成します。

ビルド実行が「ソースのダウンロード」ステップで一貫して失敗します:

リポジトリ<repo URL>にアクセスできない/<repo ID and port number>への接続に失敗したという内容のエラー・メッセージが表示される場合があります。

これは、buildStagebuildSourceのいずれかで構成されたリポジトリURLに、ビルド・ランナーからアクセスできない場合に発生する可能性があります。

構成されたリポジトリURLが正しいかどうかを確認し、リポジトリURLがプライベートIPの場合はプライベート・アクセスを構成します。

ビルド実行が「ソフトウェア環境の設定」ステップまたは「ソースのダウンロード」ステップ、あるいは「ビルド仕様ファイルの顧客ステップのいずれか」ステップで一貫して失敗します:

次のいずれかのエラー・メッセージが表示される場合があります:
  1. 内部エラー。setup_software_envステップの失敗時に発生します。
  2. リポジトリにアクセスできません。ソースのダウンロード失敗時に発生します。
  3. 顧客ログのネットワーク関連のエラー。

これは、Virtual Cloud Network (VCN)を正しく設定していない場合に発生する可能性があります。

プライベート・アクセスを構成する場合、ビルド・ランナーVMの送信トラフィックはVCNによって制御されます。VCNの内部ドメイン・ネーム・システム(DNS)解決は、プライベート・アクセスではサポートされていません。IPを使用して、プライベート・ネットワークでホストされているサービスと通信します。プライベート・アクセスを構成するVCN (サブネット):

  1. 構成済VCNにサービス・ゲートウェイとNATゲートウェイのいずれかが必要です。
  2. これらのゲートウェイのいずれかを介してすべてのOCIサービスにアクセスできるようにするには、ルート・ルールを追加する必要があります。ビルド仕様ファイルのソース・コードまたはコマンドがインターネットにアクセスする必要がある場合は、ビルドを実行する前に適切なルールが存在している必要があります。ビルド・ランナーからのすべての送信トラフィックがネットワークを通過するため、これは必須です。

プライベート・アクセスを使用して「マネージド・ビルド」ステージからビルド仕様のdockerコマンドを実行すると、ビルド実行が失敗します:

このエラーは、「マネージド・ビルド」ステージがプライベート・アクセスで構成されており、ビルド仕様ファイルにdockerコマンドがある場合に発生します。たとえば、インターネットにアクセスするコマンドがdockerファイルに含まれている場合、dockerビルドはDNS解決エラーまたは接続タイムアウト・エラーで失敗します。同様に、コンテナからインターネットにアクセスしようとすると、docker実行はDNS解決エラーまたは接続タイムアウト・エラーで失敗します。

これを解決するには、dockerコマンドで--network hostを使用して、Dockerコンテナ・ネットワークを適切に構成します。たとえば、
docker build --network host -t hello-world:1.0
docker run --network host hello-world:1.0