web-dev-qa-db-ja.com

JenkinsとGoogleCloud Source Repository

CI/CDにJenkinsを使用しようとしています。 Python flaskアプリケーションを開発しました。このアプリケーションをGoogleApp Engineにデプロイしています。これまでのところ、gcloud app deploy app.yamlコマンドを使用してデプロイしていますGoogle AppEngineへのアプリケーション。

このアプリケーションのコードは、Google Cloud SourceRepositoryにあります。

Git(Google Cloud Source Repository)への認証にはGoogle OAuthが必要なので、インストールしました Google OAuth Credentials Plugin

今私は2つの問題に直面しています

  1. 「メタデータからのGoogleサービスアカウント」の認証情報を使用すると、「ソースコード管理」にリストされている認証情報が表示されません。 See screenshot
  2. 「秘密鍵からのGoogleサービスアカウント」を使用すると、認証情報を表示できます。しかし、jenkinsジョブを実行すると、エラーが発生します。

致命的:com.google.jenkins.plugins.source.GoogleRobotUsernamePassword.writeObject()を呼び出せませんでした:クラスcom.google.jenkins.plugins.sourceのcom.google.jenkins.plugins.source.GoogleRobotUsernamePasswordModule $ ForRemote#credentialsのシリアル化に失敗しました.GoogleRobotUsernamePasswordModule $ ForRemote ----デバッグ情報----メッセージ:com.google.jenkins.plugins.source.GoogleRobotUsernamePassword.writeObject()を呼び出せませんでした原因-例外:Java.lang.RuntimeException原因-メッセージ:シリアル化に失敗しましたcom.google.jenkins.plugins.source.GoogleRobotUsernamePasswordModule $ ForRemote#credentials for class com.google.jenkins.plugins.source.GoogleRobotUsernamePasswordModule $ ForRemote -------------------- ----------- Java.lang.UnsupportedOperationException:セキュリティ上の理由からorg.joda.time.DateTimeのマーシャリングを拒否しています。 https://jenkins.io/redirect/class-filter/ at hudson.util.XStream2 $ BlacklistedTypesConverter.marshal(XStream2.Java:543)atcom.thoughtworks.xstream.core.AbstractReferenceMarshallerを参照してください。 convert(AbstractReferenceMarshaller.Java:69)at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.Java:58)at com.thoughtworks.xstream.core.AbstractReferenceMarshaller $ 1.convertAnother(AbstractReferenceMarshaller.Java:84)

質問:JenkinsでGoogle Cloud Sourceリポジトリを認証するにはどうすればよいですか? JenkinsでGoogleCloud Sourceリポジトリを使用するために必要な手順|プラグインは何ですか?

12
sag

解決

おそらく、不足しているスコープをComputeEngineに追加する必要がありますVMクラウドソースリポジトリへのアクセスを許可するJenkinsを実行しているインスタンス。 ドキュメント またはこの手順に従うことができます、便利だと思う方。

  1. Cloud Deployment Manager に移動します
  2. 問題のJenkinsデプロイメントの名前をクリックします
  3. 左側の情報ペインでインスタンス名をクリックすると、VM instance detailsにリダイレクトされます
  4. Stopインスタンス
  5. Editを押して、クラウドソースリポジトリの適切なアクセススコープを設定します

VMインスタンスを開始した後、gitリポジトリを再度追加してみてください。「メタデータからのGoogleサービスアカウント」またはサービスアカウントから認証情報を選択すると、すべてが正常に機能するはずです。

精緻化

「無効な認証資格情報」に出くわしました。デプロイ後にクラウドソースリポジトリを追加しようとしたときに問題が発生しました LauncherのJenkins

私の場合、それが発生した理由は、デプロイのプロセス中に、Compute Engine上のクラウドソースリポジトリクラウドAPIアクセススコープ VM instanceDisabledに設定されました。これにより、サービスアカウントに必要なすべての役割/権限がある場合でも、そのインスタンスからの対話が防止されました。

Launcherによって再構成されるスコープは次のとおりです。

scopes:
  - 'https://www.googleapis.com/auth/cloud.useraccounts.readonly'
  - 'https://www.googleapis.com/auth/devstorage.read_only'
  - 'https://www.googleapis.com/auth/logging.write'
  - 'https://www.googleapis.com/auth/monitoring.write'
  {% if enableComputeApi %}
  - 'https://www.googleapis.com/auth/compute'
  {% endif %}
  - 'https://www.googleapis.com/auth/cloudruntimeconfig'

次の scope をVM Jenkinsを実行しているインスタンスに追加するだけで、エラーを修正できました。

https://www.googleapis.com/auth/source.read_only 

追加:

Google APIのスコープのリスト。

6
A.Queue

プラグインを0.6バージョンに更新しました。 0.6バージョンでは、Jenkinsの「フリースタイル」プロジェクトでも同じ問題が発生します。 Jenkinsの「パイプライン」プロジェクトでチェックアウトに成功することができます。他のプロジェクトの「チェックアウト構文」をコピーして、構文の2つの部分を右側に置き換えます。

資格情報ID-> jenkinsの秘密鍵からGoogleサービスアカウントを作成した正しい資格情報IDに置き換えます。 url-> GoogleソースリポジトリのURLに置き換えます

1
soartseng