programing

작업 트리의 일부가 포함된 Git 사후 수신 후크

newsource 2023. 2. 15. 22:05

작업 트리의 일부가 포함된 Git 사후 수신 후크

git을 사용하여 웹 사이트에 테스트 서버로 전개하고 싶습니다.내 웹사이트는 꿀꺽으로 만든 워드프레스 테마이고 저장소는 다음과 같이 생겼다.

theme.git/
-- gulpfile.js
-- src/
-- build/

서버상에 빈 저장소를 설정하고, git 워크 트리의 위치를 설정하고, 수신 후 훅을 작성하여 해당 위치에 대한 리포의 체크 아웃을 하는 등, 여기와 여기의 순서를 따르고 있습니다.

는 제가 build/폴더를 서버의 위치로 이동합니다.를 하나의 위치로으로 베어는 워크 트리가 전혀 을 읽었기 에). 나서, 「 hook」을 쓰는 이었다.cp를 「」로 합니다wp-content/themes/

불필요하게 복잡해 보여서 좀 더 효율적이고 일반적인 방법이 없을까 생각 중이에요.감사합니다!

★★★를 사용하는 git 광범위하게 보면, 툴이 시스템이기 이상하다고 됩니다.git 훅으로 여러 가지 이상한 일을 할 수 있는 것은 사실이지만, 왠지 모르게 당신을 괴롭히는 경향이 있습니다.

통상, 그 업무에는 어떠한 종류의 연속적인 통합 툴을 사용하는 것을 추천합니다.제가 직접 사용할 수 있는 워크플로우 중 하나는

  1. GitHub의 공용 저장소에 테마 파일을 저장하십시오.무료입니다. 테마 소스 코드에는 큰 비밀은 없습니다.또한 보너스로 오픈 소스 테마도 사용할 수 있습니다.
  2. 저장소에 대해 Travis CI를 사용하여 CI 작업을 설정합니다.기본적으로 클라우드에는 무료 빌드 머신 인스턴스가 있으며 빌드 전후에 모든 작업을 수행할 수 있습니다.예를 들어 도망갈 수 있어gulp build를 하지 build에 디렉토리가
  3. after_success 빌드 할 수 .scp다음은 FTP에서 동일한 작업을 수행하는 예입니다.Travis는 기밀 데이터의 암호화를 지원하므로 git repo에 사용자 이름과 비밀번호를 저장하는 것에 대해 걱정할 필요가 없습니다.

이 흐름은 git repo에 무언가를 커밋할 때마다 빌드를 전개하고 싶을 때 유용합니다. 처음 했을 때 I this make this ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★. '이렇게 하면'git push다'

단, 테스트서버에 코드를 도입하는 것을 언급하고 있습니다.CI 툴(Travis 등)은 다양한 도입 단계 간의 흐름을 유지하기 위해 사용할 수 있으며, 그 중 대부분은 서버 테스트 단계입니다.대규모 프로젝트 흐름의 한 가지 예는 다음과 같습니다.

development -> tests passing? -> release -> tests passing? -> integration -> tests passing? -> staging -> tests passing? -> production

...CI 툴을 사용하여 흐름의 일부를 자동화하거나 완전히 자동화할 수 있습니다.

다만, 빌드의 도입은, 1회성이라고 하는같습니다만, 수작업으로 실시하는 경우가 있습니다(잘못 이해하셨다면 죄송합니다).이러한 일회성 작업에는 셸 스크립트 또는 작업 관리 도구를 사용하는 것이 더 적합합니다.

gulp다양한 태스크 스트림을 쉽게 조합할 수 있기 때문에 매우 편리한 도구입니다.로 할 수 .gulp build1')gulp deploy-test )을한 것입니다.build테스트 서버에 파일을 복사하기 위한 추가 단계가 있는 태스크입니다.gulp-scp는 태스크에 적합한 플러그인처럼 보입니다(단, 제가 직접 사용한 것은 아니지만 구글에서 처음 검색한 결과입니다).그래도 안 되면 언제든지 전화하시면 됩니다.scp수동으로 벌프 셸 또는 그와 유사한 것을 사용합니다.

배포 작업을 매개 변수화하여 다음과 같은 작업을 수행할 수도 있습니다.gulp deploy --test ★★★★★★★★★★★★★★★★★」gulp deploy --production

그렇지, 이게 네 첫 수업이었어.소프트웨어 프로젝트에서 이러한 태스크 자동화가 흥미로운지 알아야 할 점이 많습니다.

은 단도직입적인 표현입니다.git read-tree 전개 를 보관하고과 같은 합니다. 배포 디렉터리에 있는 항목에 대한 매니페스트 인덱스를 유지하고 다음과 같은 사전 수신으로 업데이트를 처리합니다.

#!/bin/sh
while read old new ref; do [[ $ref = refs/heads/master ]] && {
    export GIT_INDEX_FILE=deployment-manifest
    export GIT_WORK_TREE=/path/to/deployment
    git read-tree -um `git write-tree` $new:build || exit 1
}; done

방법으로 전개되고 있는 파일의 일부가 전개 트리에서 변경되었을 경우,git read-tree여기서 푸시는 실패하게 됩니다. 왜냐하면 git은 당신이 말하지 않은 콘텐츠를 덮어쓰지 않기 때문입니다.

저는 항상 git를 전개에 사용하고 있습니다.전혀 이상할 게 없고, @cido가 왜 반대하는지 모르겠어요.「도입」지점의 어느 시점에서도 시간을 되돌릴 수 있고, 그 시점에서 서버상에서 가동하고 있던 것을 정확하게 확인할 수 있는 것은 큰 가치가 있습니다.

스토리지에 사용하는 git repo와 도입에 사용하는 git repo를 혼동하지 마십시오.완전히 깨끗한 git 트리를 당신의 생산 지역에 체크 아웃해야 합니다(그것이 무엇이든). 그리고 제가 제안했듯이, 당신은 'deploy' 또는 'production' 또는 'stageing'이라고 불리는 별도의 브랜치를 원할 수 있습니다.

수신 후 후크에서는, 실전 가동 영역에 들어가는 스크립트를 실행해, 도입 브랜치를 갱신하면 됩니다.

실행 시 등)의 장소에 되어 있는 에 대해 할 git을 할 수 .git clean -dfx 되는 경우에는 그 에도 필요한 것이 만, 에 따라서는 하는 것이 됩니다.이 서버가 정기적으로 (클라우드 도입 등) 처음부터 재구축될 것으로 예상되지만 사용 사례에 따라서는 수동으로 초기 셋업을 하는 것이 좋다고 생각되는 경우에는 다른 방법이 있습니다.

cp빌드 디렉토리를 제자리에 배치하는 것은 괜찮은 것 같습니다만, 일반적으로 변경은 증분만 하면 더 빠르기 때문에 rsync를 사용하는 것이 좋습니다.

당신의 프로젝트를 두 개의 저장소로 나눕니다.

  1. 출처라든지 뭐든 다 포함해서요/build/ 디렉토리를 제외합니다.소스 제어에만 사용하십시오.이것은 웹 사이트로 전송되지 않습니다(Git repo 형태로도 웹 사이트에 코드를 저장하는 것은 안전하지 않을 수 있습니다).

  2. 도입./build/ 디렉토리만.디렉토리 내에서 새로운 git repo를 시작할 수 있습니다.서버상에 리모트 리포(repo)가 있습니다.전처럼, 수신 후의 훅을 사용해 전개할 수 있습니다.

언급URL : https://stackoverflow.com/questions/30079484/git-post-receive-hook-with-part-of-work-tree