2014-11-15 5 views
3

우리는 PHP 프로젝트를 github에 저장하고 있습니다. 빠른 배포를 들어Elastic Beanstalk "git aws.push"만 커미트 된 차이점은 무엇입니까?

우리는 AWS 탄성 콩 줄기 클라우드로의 변경을 밀어 자식에 대한 .BAT 파일을 사용하고 있습니다 : 우리는 밀어 넣기 전에 모든 시간을 투입하고있다

"C:\Program Files (x86)\Git\bin\sh.exe" --login -i -c "git aws.push --environment envname" 

, 그리고 예상대로, 그냥 완벽하게 작동하고.

불행히도, 언젠가는 언젠가는 (PHP 코드 변경의 차이를 푸는) 정말로 빠르지 만, 때로는 전체 300MB 프로젝트 (모든 미디어 포함)를 보냅니다.

다른 방법으로 변경된 사항 만 밀어 넣을 수 있습니까? 어쩌면 push 또는 prep git 명령에 추가 매개 변수가 있습니까? 또는 AWS EB에게 github 저장소의 마지막 커밋을 가져 오도록 지시 할 수있는 방법이 있습니까?

도움 주셔서 감사합니다.

+0

탄성 콩 줄기의 응용 프로그램 버전이 큰 그 번들을 허용하지 않기 때문에 나는이에 의해 혼란 스러워요 . ~ 400MB 어딘가에 하드 제한이 있습니다 –

+0

@Humdinger 5Gb는 실제 값입니다. :) 실제로는 약 300MB이지만 여전히 우리 나라 인터넷 연결을 사용하면 업로드하는 데 약 30 분이 걸립니다. – Kainax

+0

왜 downvote? 얼마나 많은 프로젝트 무게가 300MB 또는 5GB인지, 질문이 같은지는 중요하지 않습니다. 변경 사항을 푸시하는 대신 전체 레포 푸시를 방지하는 방법은 무엇입니까? – Kainax

답변

2

몇 달 간의 문제로 문제의 원인을 해결했습니다.

문제는 현재 파일은 자식에 최선을 다하고 있습니다 또는 그들은 앞서 저장소의 경우

aws.push 

명령에 탄성 콩 줄기가 확인된다는 점이다. 파일이 마지막 자식 커밋과 동일하면 EB는 차이 만 가져 오지만 파일이 마지막 자식 커밋보다 앞서면 , 그 다음 은 전체 폴더를 가져옵니다!이미 다음이 .bat 파일을 사용하면됩니다 실행하기 전에 커밋 않은 경우,

cls 
git add . 
git commit -a 
git aws.push --environment myenvironment 
pause 

지금 :

는 aws.push 명령 전에 변경 사항을 적용하려고 내가 Windows 용 deploy.bat 파일을 만들어 문제를 방지하려면 차이 만 업로드하십시오. 그렇지 않으면 차이를 업로드하기 전에 git commit 메시지를 요청할 것입니다.

PS - 이미 EB에있는 버전을 한 번 더 푸시하려고 시도하면 전체 폴더를 업로드하려고 시도합니다.

PSS - EB가 전체 폴더를 가져오고, 창을 닫고, 소스 코드를 약간 변경 (새 줄이나 주석 추가)하고, 저장하고, git에 변경 사항을 적용하고, deploy.bat 파일을 다시 실행하십시오.

매력처럼 작동합니다!

편집 : 새로운 독립 EB CLI를 사용하는 사람들을 위해

, 코드는 다음과 같습니다

cls 
git add . 
git commit -a 
eb deploy your_environmant_name 
pause 
2

git aws.push을 발행하면 전체 자식 저장소가 압축되어 Elastic Beanstalk에 업로드되므로 긴 푸시 시간이 소요됩니다. 그것이이 명령이 구현되는 방식입니다. 좋은 토론과 변경 요청이 있습니다 in this thread.
코드에서 파일의 크기가 너무 커지는 지 잘 모르겠지만 일반적으로 응용 프로그램 git에 파일을 저장하지 않는 것이 가장 좋습니다.
미디어 파일 인 경우 S3 (또는 웹에 액세스 할 수있는 다른 위치)에 저장합니다. 대부분의 파일이 git에있는 외부 라이브러리 인 경우 EB pre-deploy script으로 미리 설치할 수 있습니다.

+0

스레드에 대한 링크를 제공해 주셔서 감사합니다. 'git aws.push'와 관련해서는 (실제로) 항상 그렇게 행동하는 것은 아니지만 제 경우에는 전체 콘텐츠 푸시가 누름 중 ~ 10 %에서만 발생합니다. 다른 모든 9/10 푸시는 화격자 작동 중 (단지 자식 변경 만 푸시됩니다). – Kainax

+0

미디어 파일 크기에 관해서는 3D 아티스트가 모델을 변경할 때마다 실제로 변화하는 360도 이미지를 동적으로 생성하므로 개발 기간 동안 끊임없이 변화하며 매번 변경 사항을 업로드해야하므로 현재 수동 버클링 업로드는 우리를위한 해결책. 해결책을 찾지 못한다면 자동 S3 업로드로 맞춤 imgs 생성 소프트 마어를 확장 할 것입니다. – Kainax

+0

이 답변은 틀렸습니다. 적어도 Windows에서는 git aws.push가 powershell을 사용하여 구현되었습니다. 사용자와 URL을 가져와 어디에서 푸시해야하는지, 그리고 일반 git 푸시를 수행하면 어떻게됩니까? 나는 amazon이 배포되고 URL이 푸시 된 곳과 같지 않기 때문에 동일한 서버에 밀어 넣지 않고 전체 Repo를 밀어 넣어야한다고 생각합니다. 답변으로이 정보를 수락 하시겠습니까? –

2

아마존의 버그이므로 해결 방법을 구현했습니다.

서버에 자식 계정을 설치했는데 (개인 전용 저장소와 무제한 공동 작업자 인 Gitlab을 사용 했음) 원하는대로 사용할 수 있습니다 (github, gitlab, 서버).

당신과 git 서버 사이의 프로세스는 신뢰할 만합니다. 변경 사항은 항상 푸시해야합니다. EC2 서버에서는 git 저장소를 설정합니다 (설정 파일 인 .ebextensions/*. config를 사용하거나 수동으로 수행 할 수 있습니다. 모든 인스턴스에 설정하지 말고 수동으로 설정하는 것이 좋습니다). 그러면 git 서버와 EC2 서버에서 연결됩니다. git pull과 git aws.push.

예를 들어 git push를 수행 할 때이를 알리고 git pull 및 git aws.push를 자동으로 수행하도록 웹 훅을 설정할 수 있습니다. 제 경우에는 SSH를 사용하여 배포 할 때를 선호합니다. 이것은 항상 git 서버에 커밋을 푸시하는 것이 아닙니다.

이렇게하면 EC2 서버에서 Elastic Beanstalk 서버로가는 aws.push가 매우 빠르며 모든 것이 푸시되거나 변경 사항 만 푸시면 상관 없습니다.