Google app engine Jenkins与谷歌云资源库

Google app engine Jenkins与谷歌云资源库,google-app-engine,jenkins,google-cloud-platform,google-cloud-source-repos,Google App Engine,Jenkins,Google Cloud Platform,Google Cloud Source Repos,我正在尝试将Jenkins用于CI/CD。 我开发了一个Python flask应用程序。我正在将此应用程序部署到Google App Engine中。到目前为止,我正在使用gcloud app deploy app.yaml命令将应用程序部署到Google app Engine 此应用程序的代码存在于Google云源存储库中 由于对gitGoogle云源存储库的身份验证需要Google OAuth,所以我安装了 现在我面临两个问题 当我使用元数据凭据种类中的Google服务帐户时,我没有看到源

我正在尝试将Jenkins用于CI/CD。 我开发了一个Python flask应用程序。我正在将此应用程序部署到Google App Engine中。到目前为止,我正在使用gcloud app deploy app.yaml命令将应用程序部署到Google app Engine

此应用程序的代码存在于Google云源存储库中

由于对gitGoogle云源存储库的身份验证需要Google OAuth,所以我安装了

现在我面临两个问题

当我使用元数据凭据种类中的Google服务帐户时,我没有看到源代码管理中列出的凭据。 当我从私钥使用Google服务帐户时,我能够看到凭据。但当我运行我的詹金斯工作,我得到以下错误 致命:无法呼叫 com.google.jenkins.plugins.source.GoogleRobotUsernamePassword.writeObject :未能序列化 com.google.jenkins.plugins.source.GoogleRobotUsernamePasswordModule$ForRemotecredentials 上课 com.google.jenkins.plugins.source.GoogleRobotUsernamePasswordModule$ForRemote -调试信息消息:无法调用com.google.jenkins.plugins.source.GoogleRobotUsernamePassword.writeObject 原因异常:java.lang.RuntimeException原因消息: 未能序列化 com.google.jenkins.plugins.source.GoogleRobotUsernamePasswordModule$ForRemotecredentials 上课 com.google.jenkins.plugins.source.GoogleRobotUsernamePasswordModule$ForRemote ----------------java.lang.UnsupportedOperationException:拒绝封送 出于安全原因,org.joda.time.DateTime;看见 在 hudson.util.XStream2$BlacklistedTypesConverter.MarshallXStream2.java:543 在 com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convertAbstractReferenceMarshaller.java:69 在 com.thoughtworks.xstream.core.TreeMarshaller.convertAnotherTreeMarshaller.java:58 在 com.thoughtworks.xstream.core.AbstractReferenceMarshaller$1.convertAnotherAbstractReferenceMarshaller.java:84

问题:如何在Jenkins中验证Google云源存储库?使用Jenkins中的Google云源代码库需要哪些步骤?插件?

解决方案 您可能需要向运行Jenkins的计算引擎VM实例添加一个缺少的作用域,该实例将允许它访问云源存储库。您可以按照或此步骤进行操作,只要您觉得方便

去 单击有问题的Jenkins部署的名称 单击左侧信息窗格中的实例名称,它会将您重定向到VM实例详细信息 停止实例 按Edit并设置云源存储库的正确访问范围 启动VM实例后,再次尝试添加git存储库,一旦选择凭据(来自元数据的Google服务帐户或来自服务帐户),一切都应该正常工作

详尽阐述 我偶然发现了无效的身份验证凭据。部署后尝试添加云源存储库时出现问题

在我的例子中,发生这种情况的原因是,在部署过程中,计算引擎VM实例上的云源存储库被设置为禁用,这阻止了来自该实例的任何交互,即使服务帐户具有所有必要的角色/权限

以下是启动器重新配置的作用域:

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'
将以下内容添加到运行Jenkins的VM实例足以修复此错误:

https://www.googleapis.com/auth/source.read_only 
额外:
我将插件更新为0.6版本。 在0.6版本中,我在Jenkins自由风格项目中遇到了同样的问题。 我可以在詹金斯管道项目中成功结帐。 我只是复制了others项目中的签出语法,并将语法的两部分替换到右侧:

credentialsid->替换为您从jenkins中的私钥创建的Google服务帐户的右侧凭据id。
url->replace to your google source repository url

我添加了所需的权限。但正如我在问题中所指出的,当我使用Google Service Account from metadata选项时,我没有看到源代码管理中列出的凭据。我已经确认了这种行为。从试图访问元数据的情况来看,不清楚是什么导致了这种情况。你可以在Jenkins的问题跟踪器上创建一个问题。我假设从元数据创建服务帐户是可行的,因为两种类型的凭据都分配了相同的名称,这让我很困惑。