在AWS lambda中运行'git'

Nat*_*han 13 amazon-web-services aws-lambda

我正在尝试在AWS lambda中运行git来检查存储库.

这是我的设置:

  • 我正在使用nodejs 4.3
  • 我没有使用nodegit,因为我想使用"--depth = 1"参数,这是nodegit不支持的.
  • 我已经从正确的AWS AMI复制了git和ssh可执行文件,然后放在我上传的zip文件夹中的"bin"文件夹中.
  • 我将它们添加到PATH中:

- >

process.env['PATH'] = process.env['LAMBDA_TASK_ROOT'] + "/bin:" + process.env['PATH'];
Run Code Online (Sandbox Code Playgroud)

输入变量设置如下:

"checkout_url": "git@...",
"branch":"master
Run Code Online (Sandbox Code Playgroud)

现在我这样做(为了简洁起见,我混合了一些伪代码):

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");
Run Code Online (Sandbox Code Playgroud)

使用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.
Run Code Online (Sandbox Code Playgroud)
  • "警告"当然是因为我没有安装git而只是复制了二进制文件.这是不应该工作的原因吗?
  • 为什么git需要"setuid"?我在一些shell中读到了这些因为安全原因而被禁用.所以它在lambda中不起作用是有道理的.git可以以某种方式被指示不"需要"这个命令吗?

Mic*_*art 14

是的,这绝对是可能的 - 您可以通过创建自己的git tar包并对Lambda执行进行解包来实现.

这正是我在LambCI所做的.

您需要确保将以下env变量设置为适当的位置:

  GIT_TEMPLATE_DIR: '/tmp/myDir/usr/share/git-core/templates'
  GIT_EXEC_PATH: '/tmp/myDir/usr/libexec/git-core'
Run Code Online (Sandbox Code Playgroud)

我将创建一个repo来更好地记录(并收集食谱)在AWS Lambda上实现自定义软件执行的一些方法,但是现在只有一个问题可以解决.