Google 上的云构建 API deploy:run Apps 脚本不起作用

Cloud build API deploy:run on Google Apps Script doesn't work

我确认了 GAS 服务帐户的授权。 "list" 是可行的,但 "run" 方法永远行不通。错误消息是 "source must not be empty"。我应该附上什么样的json?

这是在使用 GSApp 库的独立 GAS 上。 (应用程序脚本 GSApp 库:MJ5317VIFJyKpi9HCkXOfS0MLm9v2IJHf)

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"
  }
}

UrlFetchApp.fetch() 无法将“source”识别为有效的 属性。请改用“payload”。此外,您还需要 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"
    })

};