我正在尝试在AWS lambda中运行git来检查存储库。
这是我的设置:
- >
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.
答案 0 :(得分: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'
我将创建一个repo来更好地记录(并收集食谱)在AWS Lambda上实现自定义软件执行的一些方法,但是现在只有issue open for it。
答案 1 :(得分:0)
问题是你不能只复制git二进制文件。你需要一个可移植的git版本,即使这样你也会有不好的时间,因为你无法保证运行lambda函数的os将与二进制文件兼容。
退后一步,我会完全放弃这种方法。我会克隆并构建一个我下载的软件包,就像下载DeploymentKeyFromS3Sync一样。
答案 2 :(得分:-2)
您可能认为这是一个非答案,但我发现从Lambda运行任意二进制文件的最简单方法是......不是。如果我无法在独立于平台的非二进制方法中完成工作,我将Docker集成到工作流中,从Lambda函数管理Docker容器。
在AWS上,一种方法是使用弹性容器服务(ECS)来生成运行git的任务。
如果您站起来使用Docker Swarm实例或集成另一个兼容Docker-API的服务(如Rackspace Carina或Joyent的Triton),那么您可以使用我个人专门用于集成AWS Lambda和Docker的项目:"Dockaless"
祝你好运!