JenkinsのGoogle Play Android Publisher Pluginで 400 Bad Request, invalid_grant エラー

JenkinsのGoogle Play Android Publisher Pluginで、次のエラーで、アップロードに失敗していました。

Upload failed: org.jenkinsci.plugins.googleplayandroidpublisher.EphemeralCredentialsException: Failed to validate Google Service Account credential against the Google API servers. Check internet connectivity on the Jenkins server and try again. at org.jenkinsci.plugins.googleplayandroidpublisher.CredentialsHandler.getServiceAccountCredentials(CredentialsHandler.java:64) at org.jenkinsci.plugins.googleplayandroidpublisher.ApkPublisher.publishApk(ApkPublisher.java:374) at org.jenkinsci.plugins.googleplayandroidpublisher.ApkPublisher.perform(ApkPublisher.java:195) at hudson.tasks.BuildStepCompatibilityLayer.perform(BuildStepCompatibilityLayer.java:79) at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20) at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:741) at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:690) at hudson.model.Build$BuildExecution.post2(Build.java:186) at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:635) at hudson.model.Run.execute(Run.java:1840) at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43) at hudson.model.ResourceController.execute(ResourceController.java:97) at hudson.model.Executor.run(Executor.java:429) Caused by: java.security.GeneralSecurityException: Unable to retrieve an access token with the provided credentials at com.google.jenkins.plugins.credentials.oauth.RemotableGoogleCredentials.<init>(RemotableGoogleCredentials.java:65) at com.google.jenkins.plugins.credentials.oauth.GoogleRobotCredentials.forRemote(GoogleRobotCredentials.java:177) at org.jenkinsci.plugins.googleplayandroidpublisher.CredentialsHandler.getServiceAccountCredentials(CredentialsHandler.java:39) ... 12 more Caused by: com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request { "error" : "invalid_grant", "error_description" : "Invalid JWT: Token must be a short-lived token (60 minutes) and in a reasonable timeframe. Check your iat and exp values and use a clock with skew to account for clock differences between systems." } at com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:105) at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:287) at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:307) at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:394) at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:493) at com.google.jenkins.plugins.credentials.oauth.RemotableGoogleCredentials.<init>(RemotableGoogleCredentials.java:60) ... 14 more

Ubuntu、Jenkins本体、プラグインをアップデートする、GooglePlayConsoleでサービスアカウントを新規作成する、鍵を新規生成する、JenkinsのCredentialsを新規作成する、とだいぶ迷走しました。

「com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request」で検索して、ようやく次の記事を見つけました。
GoogleのService Account認証に潜む invalid_grant 問題

Jenkinsサーバーの時計を確認すると、20分進んでいて、これが原因でした。JenkinsサーバーはUbuntu 14.04で「インターネット経由で時刻を合わせる」設定でしたが、なぜか20分も進んでいました。

dateコマンドで正しい時間を設定したところ、無事、GooglePlay Consoleにアップロードされました。

# 時計を 7月16日 01:26:00 に設定する $ sudo date 07160126
タイトルとURLをコピーしました