首页 > 解决方案 > 云构建 API 部署:在 Google Apps 上运行脚本不起作用

问题描述

我在 GAS 上确认了服务帐户的授权。“列表”是有效的,但“运行”方法永远不会奏效。错误消息是“源不得为空”。我应该附加什么样的json?

这是在使用 GSApp 库的独立 GAS 上。(Apps-Script-GSApp-Library : MJ5317VIFJyKpi9HCkXOfS0MLm9v2IJHf)</p>

function deploy() {
  var jsonKey = JSON.parse(PropertiesService.getScriptProperties().getProperty("jsonKey"));
  var serverToken = new GSApp.init(jsonKey.private_key, ["https://www.googleapis.com/auth/cloud-platform"], jsonKey.client_email);
  var tokens = serverToken.addUser(jsonKey.client_email).requestToken().getTokens();
  var url = "https://cloudbuild.googleapis.com/v1/projects/{ProjectId}/triggers/{TriggerId}:run";
  var options = {
    "muteHttpExceptions": true,
    "method": "POST",
    "headers": {
      "Authorization":"Bearer "+tokens[jsonKey.client_email].token,
    },
    "source": {
      "projectId": "{ProjectId}",
      "branchName": "master",
      "repoName": "repo"
      }
  }
  Logger.log(UrlFetchApp.fetch(url,options));
}
{
  "error": {
    "code": 400,
    "message": "source must not be empty",
    "status": "INVALID_ARGUMENT"
  }
}

标签: google-apps-scriptgoogle-cloud-platformgoogle-cloud-build

解决方案


UrlFetchApp.fetch()不将“来源”识别为有效属性。请改用“有效载荷”。您还需要JSON.stringify()您的有效负载并按如下方式设置contentType属性:application/json

var options = {
    "muteHttpExceptions": true,
    "method": "POST",
    "contentType":"application/json",
    "headers": {
        "Authorization":"Bearer "+tokens[jsonKey.client_email].token,
    },
    "payload": JSON.stringify({
        "projectId": "{ProjectId}",
        "branchName": "master",
        "repoName": "repo"
    })

}; 

推荐阅读