aws instance에서 shell script로 codecommit에 push 하기

AWS Intance에서 shell script를 cron에 등록하여 자동으로 code push를 하도록 만들고 싶었다. 대략 아래와 같은 간단한 script를 만들어봤다.

#!/bin/sh

BUCKET_PATH="s"
AWS="/usr/local/bin/aws"

rm -rf /tmp/project_code

${AWS} s3 cp ${BUCKET_PATH}/project.tar.gz /tmp/project.tar.gz

cd /tmp
git clone https://project~~~~~~~~

tar xzf /tmp/project.tar.gz -C /tmp/project_code/

cd /tmp/project_code
git add .
git commit -m "Automatically update source code"
git push

위 코드는 s3 버킷에서 특정 압축 파일을 다운로드 받아 이를 git으로 관리 되는 디렉토리에 복사하고 추가 된 내용을 add해서 commit 후 push 하는 코드다. 보안 정책 때문에 다른 서버에서 자동으로 백업할 파일을 압축해서 버킷에 올리고 이를 다시 인스턴스에서 받아서 codecommit에 올리려는 목적이다.

이때 발생하는 문제가 git사용에 따른 credential 문제다. 인스턴스 기본 계정에서는 codecommit에 대한 접근 권한을 설정했기 때문에 push에 문제가 없었는데 cron으로 동작시키니 git config 내용이 적용되지 않아 push 할 때 계정을 물어보는 문제가 생긴 것이다. 이를 회피 하기 위해 다음 방법을 사용했다.

sudo git config --system credential.helper '!aws codecommit credential-helper $@'
sudo git config --system credential.UseHttpPath true

보통 –global 옵션으로 위와 같은 설정을 하는데 이를 시스템 상에서 적용할 수 있도록 –system 옵션을 준 것이다. 이렇게 하면 cron으로 스크립트를 실행하더라도 계정 정보를 따로 묻지 않고 aws에서 codecommit에 대한 접근 권한만 설정해주면 정상적으로 push가 된다.

참고

Leave a Reply