2015.07.06 18:09

AWS S3 [3] Git으로 AWS S3에 Git Push 해보자

이제 AWS S3버킷도 만들었고, aws command line으로 쉽게 sync하는 방법도 알아 보았습니다.


그런데 요즈음 웹개발은 보통 git등을 사용하여 많이 하는데 본인의 git workspace에서 작업하다가 commit한다음 test등을 마치고 모든 것이 보기 좋으면 “git push s3” 같은 명령으로 한번에 aws s3에 엡데이트된 파일을 올릴수 있다면 정말 편할 것입니다.


아래와 같은 구성으로 가능합니다. (1) 우선 로컬에 git으로 개발을 하고 있다고 가정합니다. git 업데이트를 push할수 있는 (2) remote repository를 하나 만듭니다. (2) repository는 같은 로컬에 있어도 되고 본인의 다른 서버여도 됩니다만, (2) 에는 반드시 aws가 설치 되어 있어야 합니다.



  1. git workspace: 다른 remote에서 clone을 받을수도 있도 아니면 시작해볼수도 있습니다. 여기서는 간단하게 시작해봅니다.


$ mkdir website && cd website

$ git init

Initialized empty Git repository in /home/ams/website/.git/

$ echo 'Hello, world!' > index.html

$ git add index.html

$ git commit -q -m "The humble beginnings of my web site."


  1. remote를 하나 만듭니다. 이 예제에서는 aws client command 가 설치 되어 있는 local에 만들어 줍니다.


Macintosh-2:gitworkspace hunkim$ mkdir website_s3.git && cd website_s3.git/

Macintosh-2:website_s3.git hunkim$ git init --bare

Initialized empty Git repository in /Users/hunkim/gitworkspace/website_s3.git/.git/

Macintosh-2:website_s3.git hunkim$ mkdir checkoutdir/  -- remote 에 content를 담을 곧을 만듭니다.


그런다음 (2) repository에 아래와 같은 hook을 하나 만들어 줍니다.


Macintosh-2:website_s3.git hunkim$ vi hooks/post-receive


-----

#!/bin/sh

S3_BUCKET=hunkimweb   -- 본인의 S3 bucket 이름

WORK_TREE=/Users/hunkim/gitworkspace/website_s3.git/checkoutdir   -- content 가 담긴 디렉토리


GIT_WORK_TREE=$WORK_TREE git checkout -f              -- check out 실행

aws s3 sync $WORK_TREE s3://$S3_BUCKET/ --delete     -- s3 sync 및 없어진 파일은 삭제

-----


Macintosh-2:website_s3.git hunkim$ chmod +x hooks/post-receive --- hook이 실행가능한 모드로



다시 (1) repository (workspace) 로 돌아 와서 설정해놓은 (2)를 remote로 간단하게 추가 합니다.


git remote add s3 file:////Users/hunkim/gitworkspace/website_s3.git

git push s3 +master:refs/heads/master


그럼 설정끝. 쉽게  원하시는 파일을 workspace에서 추가/수정하신 다음 git commit, 그리고 마음에 드시면 git push s3 하시면 바로 AWS S3에 업됩니다.


아래 간단한 예를 보실수 있습니다.

Macintosh-2:website hunkim$ pwd

/Users/hunkim/gitworkspace/website

Macintosh-2:website hunkim$ vi index.html


-----

Hello, world!

Test4

-----

Macintosh-2:website hunkim$ git commit index.html -m"updated"

[master 65d72cb] updated

1 file changed, 1 insertion(+), 1 deletion(-)


Macintosh-2:website hunkim$ git push s3

Counting objects: 5, done.

Writing objects: 100% (3/3), 259 bytes | 0 bytes/s, done.

Total 3 (delta 0), reused 0 (delta 0)

remote: upload: checkoutdir/index.html to s3://hunkimweb/index.html

To file:////Users/hunkim/gitworkspace/website_s3.git

  65d72cb..4f0dd15  master -> master


웹으로 접속해보면 수정된 내용이 업되어 있음을 볼수 있습니다.

이미 사용중인 git이 있다면 역시 마찬가지로 사용가능합니다. 우선 clone을 합니다. 그런다음 remote를 위와 같이 설정/추가 한다음 push 하시면 됩니다.



--- cloning

Macintosh-2:gitworkspace hunkim$ git clone https://github.com/hunkim/homepage.git homepage

Cloning into 'homepage'...

remote: Counting objects: 396, done.

remote: Compressing objects: 100% (310/310), done.

remote: Total 396 (delta 38), reused 396 (delta 38), pack-reused 0

Receiving objects: 100% (396/396), 41.37 MiB | 2.90 MiB/s, done.

Resolving deltas: 100% (38/38), done.

Checking connectivity... done


-- workspace로 들어 갑니다.

Macintosh-2:gitworkspace hunkim$ cd homepage


-- Remote 를 추가 합니다.

Macintosh-2:homepage hunkim$ git remote add s3 file:////Users/hunkim/gitworkspace/website_s3.git


-- push 합니다.

Macintosh-2:homepage hunkim$ git push s3 +master:refs/heads/master

Counting objects: 396, done.

Delta compression using up to 4 threads.

Compressing objects: 100% (310/310), done.

Writing objects: 100% (396/396), 41.37 MiB | 75.51 MiB/s, done.

Total 396 (delta 38), reused 396 (delta 38)

remote: upload: checkoutdir/Software.html to s3://hunkimweb/Software.html

remote: upload: checkoutdir/README.md to s3://hunkimweb/README.md

[...]


To file:////Users/hunkim/gitworkspace/website_s3.git

+ 7f275f6...1da0548 master -> master (forced update)


아주 잘 된듯합니다. AWS S3로 들어가면 저의 멋진 홈페이지가 그대로 보입니다. 이제 수정과 업은 (git commit/git push s3)로 매우 쉽게 가능합니다. commit된 파일을 github로 push하시려면 “git push origin” 하셔야 합니다.


AWS S3 시리즈 다른글

  1. AWS 콘솔에서 S3로 공간 (bucket)을 만들고 호스팅 하는 방법을 살펴 보고

  2. aws command line으로 S3 공간을 업데이트 하는 방법

  3. 마지막으로 git 으로 S3 공간에 push 하는 방법.

(이글에 나오는 AWS관련 지식은 Amazon Web Services Korea 테크에반젤리스트 윤석찬 <channy@creation.net> 님에게 배운 것입니다.)


저작자 표시 비영리 변경 금지
신고
트랙백이 없고 댓글이 없습니다.


티스토리 툴바