【发布时间】:2016-05-17 15:22:08
【问题描述】:
我正在尝试在 AWS lambda 中运行 git 以检查存储库。
这是我的设置:
- 我使用的是 nodejs 4.3
- 我没有使用nodegit,因为我想使用nodegit不支持的“--depth=1”参数。
- 我已从正确的 AWS AMI 复制 git 和 ssh 可执行文件,然后将其放在我上传的 zip 中的“bin”文件夹中。
- 我将它们添加到 PATH 中:
->
process.env['PATH'] = process.env['LAMBDA_TASK_ROOT'] + "/bin:" + process.env['PATH'];
输入变量设置如下:
"checkout_url": "git@...",
"branch":"master
现在我这样做(为简洁起见,我在其中混合了一些伪代码):
downloadDeploymentKeyFromS3Sync('/tmp/ssh_key');
fs.chmodSync("/tmp/ssh_key",0600);
process.env['GIT_SSH_COMMAND'] = 'ssh -o StrictHostKeyChecking=no -i /tmp/ssh_key';
execSync("git clone --depth=1 " + checkout_url + " --branch " + branch + " /tmp/checkout");
使用lambda-local 在我的本地计算机上运行它一切正常!但是当我在 lambda 中测试它时,我得到:
warning: templates not found /usr/share/git-core/templates
PRIV_END: seteuid: Operation not permitted\r
fatal: Could not read from remote repository.
- “警告”当然是,因为我没有安装 git,只是复制了二进制文件。这是为什么这不起作用的原因吗?
- 为什么 git 需要“setuid”?我在某些 shell 中读到了这一点,出于安全原因,它被禁用了。所以它在 lambda 中不起作用是有道理的。可以以某种方式指示 git 不“需要”这个命令吗?
【问题讨论】:
标签: amazon-web-services aws-lambda