Saya mengkonfirmasi otorisasi dengan akun layanan di GAS. "daftar" berfungsi, tetapi metode "jalankan" tidak pernah berfungsi. Pesan kesalahan adalah "sumber tidak boleh kosong". Jenis json apa yang harus saya lampirkan?

Ini ada di GAS mandiri menggunakan pustaka GSApp. Apps-Script-GSApp-Library : 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"
  }
}
2
Ryota Moriyama 14 Agustus 2019, 13:04

1 menjawab

Jawaban Terbaik

UrlFetchApp.fetch() tidak mengenali "sumber" sebagai properti yang valid. Gunakan "payload" sebagai gantinya. Anda juga harus JSON.stringify() payload Anda dan menyetel properti contentType sebagai application/json sebagai berikut:

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

}; 
1
TheAddonDepot 14 Agustus 2019, 11:01