Próbuję uruchomić git w AWS lambda, aby dokonać kasy z repozytorium.Uruchamianie 'git' w AWS lambda
To jest moja konfiguracja:
- Używam nodejs 4,3
- Nie używam nodegit bo chcę użyć „--depth = 1” parametr, który nie jest obsługiwany przez nodegit.
- Skopiowałem plik wykonywalny git i ssh z właściwego AWS AMI i umieściłem go w folderze "bin" w przesyłanym pliku zip.
- dodałem je do PATH z tym:
->
process.env['PATH'] = process.env['LAMBDA_TASK_ROOT'] + "/bin:" + process.env['PATH'];
Zmienne wejściowe są ustawione tak:
"checkout_url": "[email protected]",
"branch":"master
Teraz mogę to zrobić (dla zwięzłości, ja zmieszany kod pseudokodu):
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");
Uruchamianie tego na moim komputerze lokalnym przy użyciu lambda-local wszystko działa poprawnie! Ale kiedy go przetestować w lambda, otrzymuję:
warning: templates not found /usr/share/git-core/templates
PRIV_END: seteuid: Operation not permitted\r
fatal: Could not read from remote repository.
- „ostrzeżenie” to oczywiście, bo nie instalować git, ale po prostu skopiowane binarny. Czy to jest powód, dla którego to nie powinno działać?
- Dlaczego git potrzebuje "setuid"? Czytałem to w niektórych powłokach, które są wyłączone ze względów bezpieczeństwa. Więc ma sens, że nie działa w lambda. Czy można w jakiś sposób poinstruować, aby "nie potrzebowało" tego polecenia?
Więc co zrobiłeś w LambCI, który obejrzał wywołanie seteuid()? Nie widzę jeszcze nic poza kwestią otwartą? –
Używając git-2.4.3.tar z LambCI z ssh, pojawia się komunikat o błędzie 'ssh: error podczas ładowania bibliotek współdzielonych: libfipscheck.so.1: nie można otworzyć pliku obiektu współdzielonego: Brak takiego pliku lub katalogu'. Wierzę, że musisz również ustawić 'LD_LIBRARY_PATH =/tmp/myDir/usr/lib64'. –