Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过node.js在当前shell会话中设置GOOGLE_应用程序_凭据_Node.js_Google Cloud Platform_Google Cloud Storage - Fatal编程技术网

通过node.js在当前shell会话中设置GOOGLE_应用程序_凭据

通过node.js在当前shell会话中设置GOOGLE_应用程序_凭据,node.js,google-cloud-platform,google-cloud-storage,Node.js,Google Cloud Platform,Google Cloud Storage,概述: 我正在通过Node.js v8.12.0将我的产品部署自动化到GCP,然后是GCS。此部署过程的开始需要我执行以下操作: 遍历项目文件夹中的文件夹和文件以查找GCS服务帐户JSON密钥文件 识别所述密钥文件的位置 运行export GOOGLE_APPLICATION_CREDENTIALS=“/path/to/file/[file_NAME].json”设置位置,以便我可以执行代码通过节点调用GCS函数 我尝试通过node.js中的child_process.exec模块执行命令。执行

概述:

我正在通过Node.js v8.12.0将我的产品部署自动化到GCP,然后是GCS。此部署过程的开始需要我执行以下操作:

  • 遍历项目文件夹中的文件夹和文件以查找GCS服务帐户JSON密钥文件

  • 识别所述密钥文件的位置


  • 运行export GOOGLE_APPLICATION_CREDENTIALS=“/path/to/file/[file_NAME].json”设置位置,以便我可以执行代码通过节点调用GCS函数

  • 我尝试通过node.js中的child_process.exec模块执行命令。执行成功,但在另一个shell中

    根据google文档,设置google_APPLICATION_CREDENTIALS变量“……仅适用于当前shell会话,因此如果打开新会话,请再次设置该变量。”

    虽然设置它不需要花费很多时间,但我希望在部署过程中实现自动化。那么,我有没有办法在当前shell中执行此操作?对其他想法也持开放态度

    代码如下:

    const{Storage}=require('@googlecloud/Storage');
    常量存储=新存储();
    var readFileTree=require('read-file-tree');
    const prompts=require('prompts');
    const find=require('find-file-up');
    //var tty=需要('tty');
    var程序=要求(“指挥官”);
    const{exec}=require('child_process');
    常量粉笔=需要(“粉笔”);
    var gsbucket={};
    var i=0;
    函数findOauthJSON(){
    log(“查找您的服务帐户密钥…”)
    查找('fauxfile_1123456ae.json','a/b/c',函数(err,file){
    如果(文件!==未定义){
    log(“找到的服务密钥:”,文件);
    setOathJSON(文件);
    }else if(err!==未定义){
    控制台日志(err);
    }否则{
    log(“找不到服务帐户密钥。请添加到文件夹中,然后重试。”)
    }
    });
    }
    函数setOathJSON(文件){
    日志(“设置服务密钥以访问地面军事系统…”);
    var命令='export GOOGLE\u APPLICATION\u CREDENTIALS=\“'+file+'\”;
    exec(命令,(err、stdout、stderr)=>{
    if(err==null){
    log(“服务密钥集!”);
    }
    //*整个*标准输出和标准输出(缓冲)
    log(`stdout:${stdout}`);
    log(`stderr:${stderr}`);
    log(`err:${err}`);
    console.log(“cmd:+命令”);
    });
    }
    函数gstoreInfo(){
    log(“获取云存储信息…”);
    存储
    .getbucket()
    。然后(结果=>{
    常数桶=结果[0];
    bucket.forEach(bucket=>{
    gsbucket[“gstoreb”+i]=bucket.name;
    console.log(“找到的bucket:+bucket.name”);
    i++;
    });
    })
    .catch(错误=>{
    console.error('error:',err);
    });
    
    }
    找到了答案。节点惯用库允许您通过实例化的存储对象设置keyFileName路径,如下所示:

    const存储=新存储({
    projectId:'mystorage-bucket-123456',
    keyFilename:''/path/to/keyfile.json''
    
    });“因此我可以执行代码通过节点调用GCS函数”您试图从这些节点云函数调用什么GCS函数?@jimmartens列出存储桶、上载对象、设置ACL(访问控制列表)。它是跨GCP项目进行通信还是所有内容都在一个项目中?您是否考虑过使用constructor options对象并为您使用的每个API传入
    keyFilename
    ?这样,您就根本不需要
    GOOGLE\u应用程序\u凭据了。如果它都在同一个项目中,那么如果您使用惯用库,您甚至不需要凭据。我在别的地方回答了这样的问题: