Jenkins使用Google Cloud Source Repository

时间:2018-04-04 11:44:19

标签: google-app-engine jenkins google-cloud-platform google-cloud-source-repos

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

此应用程序的代码存在于Google Cloud Source Repository中。

由于对git(Google Cloud Source Repository)的身份验证需要Google OAuth,我已经安装了Google OAuth Credentials Plugin

现在我面临两个问题

  1. 当我使用“元数据中的Google服务帐户”凭证类型时,我没有看到“源代码管理”中列出的凭据。 See screenshot
  2. 当我使用“私钥中的Google服务帐户”时,我可以看到凭据。但是,当我运行我的jenkins工作时,我的错误
  3.   

    致命:无法打电话   com.google.jenkins.plugins.source.GoogleRobotUsernamePassword.writeObject()   :序列化失败   com.google.jenkins.plugins.source.GoogleRobotUsernamePasswordModule $ ForRemote#凭证   上课   com.google.jenkins.plugins.source.GoogleRobotUsernamePasswordModule $ ForRemote   ----调试信息----消息:无法调用com.google.jenkins.plugins.source.GoogleRobotUsernamePassword.writeObject()   cause-exception:java.lang.RuntimeException cause-message:   无法序列化   com.google.jenkins.plugins.source.GoogleRobotUsernamePasswordModule $ ForRemote#凭证   上课   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)     在   com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:69)     在   com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:58)     在   com.thoughtworks.xstream.core.AbstractReferenceMarshaller $ 1.convertAnother(AbstractReferenceMarshaller.java:84)

    问题:如何在Jenkins中验证Google Cloud Source存储库?在Jenkins中使用Google Cloud Source资源库需要哪些步骤?

2 个答案:

答案 0 :(得分:4)

解决方案

您可能需要向运行Jenkins的计算引擎虚拟机实例添加一个缺少的范围,以使其可以访问Cloud Source Repository。您可以按照documentation或此步骤进行操作,这些步骤很方便。

  1. 转到Cloud Deployment Manager
  2. 单击有问题的Jenkins部署的名称
  3. 点击左侧信息窗格中的实例名称,它会将您重定向到VM instance details
  4. Stop实例
  5. Edit并为Cloud Source Repository设置正确的访问范围
  6. 启动VM实例后,尝试再次添加git存储库,一旦选择了凭据,就可以从#34; Google服务帐户中获取元数据"或者从服务帐户,一切都应该正常工作。

    精化

    我偶然发现了"无效的身份验证凭据。"尝试在部署Jenkins from Launcher后添加云源存储库时出现问题。

    就我而言,发生这种情况的原因是,在部署过程中,计算引擎虚拟机实例上的云源存储库Cloud API access scope设置为Disabled,即使服务帐户具有所有必要的角色/权限,也会阻止该实例的任何交互。

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

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

    额外:

    List of scopes for Google APIs.

答案 1 :(得分:1)

我将插件更新为0.6版本。 在0.6版本中,我在Jenkins“Free-style”项目中遇到了同样的问题。 我可以在Jenkins“管道”项目中成功结账。 我只是在其他项目中复制“checkout语法”并将右边的两部分语法替换为:

凭证 - >替换为您在jenkins中从私钥创建Google服务帐户的正确凭据ID。 url - >替换为您的google源代码库网址