I, [2020-12-05T10:59:38.848743 #1] INFO -- : > cd /var/www/discourse && git remote set-branches origin v2.6.0
I, [2020-12-05T10:59:38.852600 #1] INFO -- :
I, [2020-12-05T10:59:38.852639 #1] INFO -- : > cd /var/www/discourse && git fetch --depth 1 origin v2.6.0
From https://github.com/discourse/discourse
* tag v2.6.0 -> FETCH_HEAD
I, [2020-12-05T10:59:41.405163 #1] INFO -- :
I, [2020-12-05T10:59:41.405307 #1] INFO -- : > cd /var/www/discourse && git checkout v2.6.0
error: pathspec 'v2.6.0' did not match any file(s) known to git
I, [2020-12-05T10:59:41.411796 #1] INFO -- :
이는 해당 커밋 바로 이전 커밋을 사용할 때 기대되는 출력과 다릅니다.
I, [2020-12-05T11:22:14.717910 #1] INFO -- : > cd /var/www/discourse && git fetch origin v2.6.0
From https://github.com/discourse/discourse
* tag v2.6.0 -> FETCH_HEAD
I, [2020-12-05T11:22:15.672616 #1] INFO -- :
I, [2020-12-05T11:22:15.672683 #1] INFO -- : > cd /var/www/discourse && git checkout v2.6.0
Note: checking out 'v2.6.0'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch-name>
HEAD is now at d6121249d3 Version bump to v2.6.0
git fetch --all을 실행하면 문제가 해결될 수 있지만, 사용하지 않는 참조가 나중에 다른 명령어로 정리되지 않는 한 이미지 크기가 얼마나 증가할지는 알 수 없습니다.
그럼에도 불구하고, git clone --depth 1 https://github.com/discourse/discourse.git --branch=$version이 문제를 해결할 것이라 생각합니다. --branch 옵션은 브랜치와 태그 모두를 허용하기 때문입니다. 다만 테스트를 해보지 않았고, 클론이 현재 master 브랜치를 사용해야 하는 이유가 있는지도 알 수 없습니다.
git clone --depth 1 https://github.com/discourse/discourse.git --branch=v2.6.0을 실행하면 전체 폴더 크기가 212MB이고, 그 안의 .git 폴더는 46MB입니다. 따라서 이 정도는 괜찮다고 생각합니다.
또 다른 우회 방법은 app.yml의 최상위 레벨에 base_image 키를 추가하고 값으로 이전 버전의 base image를 지정하는 것입니다. 새로운 이미지가 이전 버전의 Discourse를 실행할 수 있도록 호환성을 유지하려는 시도를 하지 않기 때문에, 충분히 오래된 버전으로 돌아가는 경우 이것이 필요할 수 있습니다.
`git pull`이 호출되면 **전체 저장소가 가져와지며**, 이전에 얕은 클론(shallow clone)만 수행되었기 때문에 몇 분 정도 걸릴 수 있습니다. 로컬에서 위의 지시문만 실행해 보면 확인할 수 있습니다.
기본 이미지에 전체 저장소가 있는 것이 더 좋다고 주장하는 것은 아니지만, `web.template.yml`의 코드는 플러그인만 추가되었거나 `app.yml`의 설정만 변경된 경우에도 모든 리빌드 시마다 실행됩니다. 저는 (discourse가 아닌) 제 프로젝트에서 보통 새 버전마다 새 이미지를 생성하는 방식을 사용하지만, 이것이 여러분에게는 실현 가능하지 않을 수 있습니다(현재 여러분이 어떻게 처리하고 있는지 고려해 볼 때).
리빌드 시간이 증가하는 것을 느끼셨나요? (또는 대부분의 경우 전체 리빌드 시간에 비해 그 정도가 크지 않을 수도 있습니다)
업데이트
위의 단계를 다시 테스트해 보았는데 빠졌습니다. 처음 시도할 때 git 트리를 변경하는 다른 명령어를 실행한 것 같아서, git pull을 실행했을 때 모든 것을 가져오려고 시도했던 것으로 보입니다.
I, [2020-12-31T11:50:24.701475 #1] INFO -- : > cd /var/www/discourse && find /var/www/discourse ! -user discourse -exec chown discourse {} \+
chown: cannot dereference '/var/www/discourse/public/plugins/styleguide': No such file or directory