Pantheon์ ๊ฒ์คํธ ๊ฐ๋ฐ์ ๋๊ตฌ ์์ฑ์๊ฐ GitLab CI/CD๋ฅผ ์ฌ์ฉํ์ฌ WordPress ๋ฐฐํฌ๋ฅผ ์๋ํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ด์ผ๊ธฐํฉ๋๋ค.
ะ
์ ๋ ๊ฐ๋ฐ์๋ค์ด ๋จ์ผ ์คํ ์ด์ง ์๋ฒ๋ก ์ธํด ์ด๋ ค์์ ๊ฒช๋ ๊ฒ์ ์ข ์ข ๋ด ๋๋ค.
์ค๊ฐ ์๋ฒ๋ฅผ ์ฌ์ฉํ ์ฐจ๋ก๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ฑฐ๋ "์ฌ๊ธฐ๋ฅผ ๋ณด๋ ์์ง ์ฌ๊ธฐ๋ฅผ ๋ณด์ง ๋ง์ธ์"๋ผ๋ ๋ฉ๋ชจ์ ํจ๊ป ํด๋ผ์ด์ธํธ์๊ฒ URL์ ๋ณด๋ด๋ ๊ฒ์ ์ ๋ง ์ฆ๊ฑฐ์ด ์ผ์ ๋๋ค.
๊ทธ๋ฌ๋ Pantheon์๋ ๋ฒ์ ์ ์ด๋ CI/CD(์ง์์ ์ธ ํตํฉ ๋ฐ ๋ฐฐํฌ)๋ฅผ ์ํ ๋๊ตฌ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ ๋ชจ๋ ๋๊ตฌ๋ฅผ ํตํฉํ ์ ์๋ ์ ์ฐํ ํ๋ซํผ์ ๋๋ค.
๋ํ ํ์์๋ ๊ฐ๋ฐ์ ์ํด ํน์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๊ณ ์กฐ๋ฆฝ ๋ฐ ๋ฐฐํฌ๋ฅผ ์ํด ๋ค๋ฅธ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ค๋ ์ ๋ ์์๋์ต๋๋ค.
์๋ฅผ ๋ค์ด ๋ฒ์ ์ ์ด ๋ฐ CI/CD๋ฅผ ์ํ ๋ค์ํ ๋๊ตฌ๊ฐ ์์ต๋๋ค. ์ฝ๋๋ฅผ ํธ์งํ๊ณ ๋ฌธ์ ๋ฅผ ์ง๋จํ๋ ค๋ฉด ๋๊ตฌ๋ฅผ ์ด๋ฆฌ์ ๋ฆฌ ์ดํด๋ณด๊ณ ์ ํํด์ผ ํฉ๋๋ค.
์
์ ๋ ์๋ํ๋ฅผ ์ข์ํ๊ธฐ ๋๋ฌธ์ GitLab์ ๋ฉ์ธ ๋ธ๋์น์ ๋ํ ์ปค๋ฐ์ด Pantheon์ ๋ฉ์ธ ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ฐฐํฌ๋๋๋ก Pantheon์ GitLab์ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ GitLab์ ๋ณํฉ ์์ฒญ์ Pantheon์ ๋ค์ค ๊ฐ๋ฐ ํ๊ฒฝ์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
์ด ํํ ๋ฆฌ์ผ์์๋ GitLab๊ณผ Pantheon ๊ฐ์ ์ฐ๊ฒฐ์ ์ค์ ํ๊ณ WordPress ๋ฐ Drupal ์ํฌํ๋ก๋ฅผ ์ต์ ํํ๋ ๋ฐฉ๋ฒ์ ์๋ดํฉ๋๋ค.
๋ฌผ๋ก ๊ฐ๋ฅํฉ๋๋ค.
์๊ฐ
์ด ๊ฒ์๋ฌผ์์๋ Pantheon์ด ๊ฐ ์ฌ์ดํธ๋ฅผ ์ฝ๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค, ํ์ผ์ ์ธ ๊ฐ์ง ์์๋ก ๋ถ๋ฅํ๋ค๋ ์ ์ ์ดํดํด์ผ ํฉ๋๋ค.
์ฝ๋์๋ WordPress ์ฝ์ด, ํ๋ฌ๊ทธ์ธ ๋ฐ ํ
๋ง์ ๊ฐ์ CMS ํ์ผ์ด ํฌํจ๋์ด ์์ต๋๋ค. ์ด๋ฌํ ํ์ผ์ ๋ค์์์ ๊ด๋ฆฌ๋ฉ๋๋ค.
Pantheon์ ํ์ผ์ ๋ฏธ๋์ด ํ์ผ, ์ฆ ์ฌ์ดํธ์ ์ด๋ฏธ์ง์
๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์๊ฐ ์
๋ก๋ํ๋ฉฐ Git์ ์ด๋ฅผ ๋ฌด์ํฉ๋๋ค.
๊ฐ์
Pantheon๊ณผ GitLab์ ๋ํ ๋ด ํ๋ก์ ํธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. pantheon-gitlab-blog-demo
. ํ๋ก์ ํธ ์ด๋ฆ์ ๊ณ ์ ํด์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์๋ WordPress ์ฌ์ดํธ๋ฅผ ๋ค๋ฃจ๊ฒ ์ต๋๋ค. Drupal์ ์ฌ์ฉํ ์ ์์ง๋ง ๋ช ๊ฐ์ง ์ฌํญ์ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค.
๋๋ ์ฌ์ฉํ ๊ฒ์ด๋ค
ํ๋ก์ ํธ ๋ง๋ค๊ธฐ
๋จผ์ , ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
์ง๊ธ
์๋ฅผ ๋ค์ด ํ๋ฌ๊ทธ์ธ์ ์ ๊ฑฐํ๊ฑฐ๋ ์ถ๊ฐํ๋ ๋ฑ ๋ฌด์ธ๊ฐ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ์ด ์์ด ๊ฐ๋ ต๋ค๋ฉด ์ธ๋ด์ฌ์ ๊ฐ์ง์ญ์์ค. ์ฌ์ดํธ๊ฐ ์์ง GitLab์ ์ฐ๊ฒฐ๋์ด ์์ง ์์ผ๋ฉฐ ๋ชจ๋ ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ด GitLab์ ํต๊ณผํ๊ธฐ๋ฅผ ์ํฉ๋๋ค.
WordPress๋ฅผ ์ค์นํ ํ Pantheon ์น์ฌ์ดํธ ๋์๋ณด๋๋ก ๋์๊ฐ ๊ฐ๋ฐ ๋ชจ๋๋ฅผ Git์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค.
GitLab์ ์ด๊ธฐ ์ปค๋ฐ
์ด์ ์ด๊ธฐ WordPress ์ฝ๋๋ฅผ Pantheon ์ฌ์ดํธ์์ GitLab์ผ๋ก ์ ์กํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด Pantheon ์ฌ์ดํธ์ Git ์ ์ฅ์์์ ์ฝ๋๋ฅผ ๋ก์ปฌ๋ก ๋ณต์ ํ ๋ค์ GitLab ์ ์ฅ์๋ก ๋ณด๋ ๋๋ค.
๋ณด๋ค ์ฝ๊ณ ์์ ํ๊ฒ ํ๊ธฐ ์ํด,
์ด๋ ๊ฒ ํ๋ ค๋ฉด ์ฌ์ดํธ ๋์๋ณด๋์ Clone with Git ํ๋์์ ๋ช ๋ น์ ๋ณต์ฌํ์ฌ Pantheon ์ฌ์ดํธ๋ฅผ ๋ก์ปฌ๋ก ๋ณต์ ํฉ๋๋ค.
๋์์ด ํ์ํ๋ฉด ์ค๋ช
์๋ฅผ ์ฝ์ด๋ณด์ธ์.
์ด์ ๋ฐ๊ฟ๋ณด์ git remote origin
Pantheon ๋์ GitLab์ ๊ฐ๋ฆฌํต๋๋ค. ๊ทธ๊ฒ์ ํ ์ ์๋ค ะบะพะผะฐะฝะดะพะน git remote
GitLab ํ๋ก์ ํธ๋ก ์ด๋ํ์ฌ ํ๋ก์ ํธ ์ธ๋ถ์ ๋ณด ํ์ด์ง์ ๋ณต์ ๋๋กญ๋ค์ด์์ ์ ์ฅ์ URL์ ๋ณต์ฌํด ๋ณด๊ฒ ์ต๋๋ค. SSH ํค๋ฅผ ์ด๋ฏธ ๊ตฌ์ฑํ์ผ๋ฏ๋ก SSH๋ก ๋ณต์ ์ต์ ์ ์ ํํ๊ฒ ์ต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก git remote
์ฝ๋ ์ ์ฅ์์ ๋ก์ปฌ ๋ณต์ฌ๋ณธ์ ๊ฒฝ์ฐ - origin
. ์ด๊ฒ์ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. git remote set-url origin [URL ัะตะฟะพะทะธัะพัะธั GitLab]
, ๋๊ดํธ ๋์ ์ค์ URL์ ์
๋ ฅํฉ๋๋ค.
๋๋์ด ์ถ์ํฉ๋๋ค git push origin master --force
WordPress ์ฝ๋๋ฅผ Pantheon์์ GitLab์ผ๋ก ํธ์ํฉ๋๋ค.
โforce ์ต์ ์ ํ ๋ฒ๋ง ํ์ํฉ๋๋ค. ๊ทธ๋ผ ํ์ผ๋ก
git push
GitLab์๋ ์์ ๊ฒ์ ๋๋ค.
์๊ฒฉ ์ฆ๋ช ๋ฐ ๋ณ์ ์ค์
Pantheon๊ณผ GitLab์ ๋ก๊ทธ์ธํ๊ธฐ ์ํด SSH ํค๋ฅผ ๋ก์ปฌ๋ก ์ถ๊ฐํ ๋ฐฉ๋ฒ์ ๊ธฐ์ตํ์๋์? SSH ํ ํฐ์ ์ฌ์ฉํ์ฌ GitLab ๋ฐ Pantheon์ ์ธ์ฆํ ์ ์์ต๋๋ค.
GitLab์๋ ํ๋ฅญํ ๋ฌธ์๊ฐ ์์ต๋๋ค. ๋ณด์
์ด์ ์ฒ์ ๋ ๋จ๊ณ๋ฅผ ์๋ฃํ๊ฒ ์ต๋๋ค. ssh-keygen์ ์ฌ์ฉํ์ฌ ๋ก์ปฌ์์ ์ SSH ํค ์์ ์์ฑํ๊ณ ๊ฐ์ธ ํค๋ฅผ ํ๋ก์ ํธ์ ๋ณ์๋ก ์ถ๊ฐํด ๋ณด๊ฒ ์ต๋๋ค..
๊ทธ๋ผ ์ฐ๋ฆฌ๊ฐ ๋ฌผ์ด๋ณผ๊ฒ SSH_PRIVATE_KEY
ะบะฐะบ
์ธ ๋ฒ์งธ์ ๋ค ๋ฒ์งธ ๋จ๊ณ์์๋ ํ์ผ์ ๋ง๋ญ๋๋ค. .gitlab-ci.yml
๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ผ๋ก:
before_script:
# See https://docs.gitlab.com/ee/ci/ssh_keys/README.html
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add - > /dev/null
- mkdir -p $HOME/.ssh && echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config"
- git config --global user.email "$GITLAB_USER_EMAIL"
- git config --global user.name "Gitlab CI"
์์ง ํ์ผ์ ์ปค๋ฐํ์ง ๋ง์ธ์. .gitlab-ci.yml
, ๊ทธ๋ฐ ๋ค์ ๋ค๋ฅธ ๊ฒ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
์ด์ ์ฐ๋ฆฌ๋ ๋ค์ฏ ๋ฒ์งธ ๋จ๊ณ๋ฅผ ์ํํ๊ณ ๋น๋ ํ๊ฒฝ์์ ์ก์ธ์คํด์ผ ํ๋ ์๋น์ค์ ์ฒซ ๋ฒ์งธ ๋จ๊ณ์์ ์์ฑํ ๊ณต๊ฐ ํค๋ฅผ ์ถ๊ฐํฉ๋๋ค..
์ฐ๋ฆฌ์ ๊ฒฝ์ฐ GitLab์์ Pantheon์ ์ก์ธ์คํ๋ ค๊ณ ํฉ๋๋ค. ์ฐ๋ฆฌ๋ Pantheon ๋ฌธ์์ ์ง์นจ์ ๋ฐ๋ฆ
๋๋ค.
๊ธฐ์ตํ์ธ์: ๋น๊ณต๊ฐ SSH๋ GitLab์ ์๊ณ ๊ณต๊ฐ SSH๋ Pantheon์ ์์ต๋๋ค.
๋ช ๊ฐ์ง ํ๊ฒฝ ๋ณ์๋ฅผ ๋ ์ค์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ฒซ ๋ฒ์งธ๋ PANTHEON_SITE์ ๋๋ค. ํด๋น ๊ฐ์ ์ปดํจํฐ์ ์๋ Pantheon ์ฌ์ดํธ์ ์ด๋ฆ์ ๋๋ค.
๋จธ์ ์ ์ด๋ฆ์ Git์ผ๋ก ๋ณต์ ๋ช ๋ น ๋์ ๋์ด๋ฉ๋๋ค. ์ด๋ฏธ ์ฌ์ดํธ๋ฅผ ๋ก์ปฌ๋ก ๋ณต์ ํ์ผ๋ฏ๋ก ์ด๊ฒ์ด ๋ก์ปฌ ์ ์ฅ์ ๋๋ ํฐ๋ฆฌ์ ์ด๋ฆ์ด ๋ฉ๋๋ค.
๋ค์์ผ๋ก ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํด ๋ณด๊ฒ ์ต๋๋ค. PANTHEON_GIT_URL
. ์ด๋ ์ด๋ฏธ ์ฌ์ฉํ Pantheon ์ฌ์ดํธ์ Git ์ ์ฅ์ URL์
๋๋ค.
์์ด SSH ์ ์ฅ์ URL๋ง ์ ๋ ฅํ์ธ์.
git clone
๊ทธ๋ฆฌ๊ณ ๋์๋ ์ปดํจํฐ์ ์ฌ์ดํธ ์ด๋ฆ์ด ํ์๋ฉ๋๋ค.
ํด. ์๋ฃ๋์์ต๋๋ค. ์ด์ ํ์ผ์ ์์ฑํ ์ ์์ต๋๋ค. .gitlab-ci.yml
.
๋ฐฐํฌ ์์ ์์ฑ
์ฒ์์ GitLab CI๋ฅผ ์ฌ์ฉํ์ฌ ์ํํ ์์ ์ ๊ณผ๊ฑฐ์ Git ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ํํ ์์ ๊ณผ ๋งค์ฐ ์ ์ฌํฉ๋๋ค. ํ์ง๋ง ์ด๋ฒ์๋ Pantheon ์ ์ฅ์๋ฅผ ๋ ๋ฒ์งธ ์๊ฒฉ Git ์์ค๋ก ์ถ๊ฐํ ๋ค์ ์ฝ๋๋ฅผ GitLab์์ Pantheon์ผ๋ก ํธ์ํ๊ฒ ์ต๋๋ค.
์ด๋ ๊ฒ ํ๋ ค๋ฉด ๋ค์์ ๊ตฌ์ฑํด ๋ณด๊ฒ ์ต๋๋ค. deploy
ะธ deploy:dev
, ์๋ํ๋ฉด ์ฐ๋ฆฌ๋ Pantheon์ ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ฐฐํฌํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์
๋๋ค. ๊ฒฐ๊ณผ ํ์ผ .gitlab-ci.yml
๋ค์๊ณผ ๊ฐ์ด ๋ณด์ผ ๊ฒ์
๋๋ค :
stages:
- deploy
before_script:
# See https://docs.gitlab.com/ee/ci/ssh_keys/README.html
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add - > /dev/null
- mkdir -p $HOME/.ssh && echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config"
- git config --global user.email "$GITLAB_USER_EMAIL"
- git config --global user.name "Gitlab CI"
deploy:dev:
stage: deploy
environment:
name: dev
url: https://dev-$PANTHEON_SITE.pantheonsite.io/
script:
- git remote add pantheon $PANTHEON_GIT_URL
- git push pantheon master --force
only:
- master
๋ณ์๋ค SSH_PRIVATE_KEY, PANTHEON_SITE
ะธ PANTHEON_GIT_URL
์ต์ํด ๋ณด์ผ ๊ฒ์
๋๋ค. ์ด๋ฌํ ํ๊ฒฝ ๋ณ์๋ฅผ ๋ ์ผ์ฐ ์ค์ ํ์ต๋๋ค. ์ด ๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ผ์ ๊ฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค .gitlab-ci.yml
์ฌ๋ฌ ๋ฒ ์
๋ฐ์ดํธํ๋ฉด ํ ๊ณณ์์๋ง ์
๋ฐ์ดํธํ๋ฉด ๋ฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก ํ์ผ์ ์ถ๊ฐํ๊ณ ์ปค๋ฐํ๊ณ ๋ณด๋
๋๋ค. .gitlab-ci.yml
GitLab์์.
๋ฐฐํฌ ํ์ธ
๋ชจ๋ ์ผ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ํํ๋ค๋ฉด ์์
์ deploy:dev
GitLab CI/CD์์ ์ฑ๊ณต์ ์ผ๋ก ์คํ๋๊ณ ์ปค๋ฐ์ ์ ์ถํฉ๋๋ค. .gitlab-ci.yml
ํํ
์จ์์. ํ๋ฒ ์ดํด๋ณด์.
Pantheon์ ๋ณํฉ ์์ฒญ ์ค๋ ๋ ๋ณด๋ด๊ธฐ
์ฌ๊ธฐ์๋ ์ ๊ฐ ๊ฐ์ฅ ์ข์ํ๋ Pantheon ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ฒ ์ต๋๋ค.
๋จผ์ ๋ค์์ ์ฌ์ฉํ์ฌ ๋ก์ปฌ์์ ์ Git ๋ธ๋์น๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค. git checkout -b multidev-support
. ์ด์ ๋ค์ ๋ญ๊ฐ๋ฅผ ๋ฐ๊ฟ๋ณด๊ฒ ์ต๋๋ค. .gitlab-ci.yml
.
Pantheon ํ๊ฒฝ ์ด๋ฆ์ ๋ณํฉ ์์ฒญ ๋ฒํธ๋ฅผ ํฌํจํ๋ ๊ฒ์ ์ข์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ฒซ ๋ฒ์งธ ๋ณํฉ ์์ฒญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. mr-1
, ๋๋ฒ์งธ - mr-2
๋ฑ.
๋ณํฉ ์์ฒญ์ด ๋ณ๊ฒฝ๋๋ฏ๋ก Pantheon ๋ถ๊ธฐ ์ด๋ฆ์ ๋์ ์ผ๋ก ๊ฒฐ์ ํด์ผ ํฉ๋๋ค. GitLab์์๋ ์ฝ์ต๋๋ค. ์ฌ์ฉํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
์ฐ๋ฆฌ๋ ๊ฑธ๋ฆด ์ ์์ต๋๋ค $CI_MERGE_REQUEST_IID
๋ณํฉ ์์ฒญ ๋ฒํธ๋ฅผ ์ง์ ํฉ๋๋ค. ์ด์ ์ ์ง์ ํ ์ ์ญ ํ๊ฒฝ ๋ณ์์ ํจ๊ป ์ด ๋ชจ๋ ๊ฒ์ ์ ์ฉํ๊ณ ํ์ผ ๋์ ์ ๋ฐฐํฌ:multidev ์์
์ ์ถ๊ฐํด ๋ณด๊ฒ ์ต๋๋ค. .gitlab-ci.yml
.
deploy:multidev:
stage: deploy
environment:
name: multidev/mr-$CI_MERGE_REQUEST_IID
url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
script:
# Checkout the merge request source branch
- git checkout $CI_COMMIT_REF_NAME
# Add the Pantheon git repository as an additional remote
- git remote add pantheon $PANTHEON_GIT_URL
# Push the merge request source branch to Pantheon
- git push pantheon $CI_COMMIT_REF_NAME:mr-$CI_MERGE_REQUEST_IID --force
only:
- merge_requests
์ฐ๋ฆฌ์ ์๋ฌด์ ๋น์ทํ ๊ฑฐ์์ deploy:dev
, ๋ธ๋์น๋ง ํํ
์จ์ผ๋ก ๋ณด๋ด์ง๊ณ , ํํ
์จ์ผ๋ก๋ ๋ณด๋ด์ง์ง ์์ต๋๋ค. master
.
์
๋ฐ์ดํธ๋ ํ์ผ์ ์ถ๊ฐํ๊ณ ์ปค๋ฐํ์ต๋๋ค. .gitlab-ci.yml
์ด์ ๋ค์์ ์ฌ์ฉํ์ฌ GitLab์ ์ ๋ธ๋์น๋ฅผ ํธ์ํ๊ฒ ์ต๋๋ค. git push -u origin multidev-support
.
์ด์ ๋ธ๋์น์์ ์๋ก์ด ๋ณํฉ ์์ฒญ์ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค. multidev-support
๋๋ฌ ๋ณํฉ ์์ฒญ ๋ง๋ค๊ธฐ.
๋ณํฉ ์์ฒญ์ ์์ฑํ ํ CI/CD ์์
์ด ์ด๋ป๊ฒ ์คํ๋๋์ง ์ดํด๋ด
๋๋ค. deploy:multidev
.
๋ณด์ธ์, ์๋ก์ด ์ค๋ ๋๊ฐ ํํ ์จ์ผ๋ก ์ ์ก๋์์ต๋๋ค. ํ์ง๋ง Pantheon ์ฌ์ดํธ ๋์๋ณด๋์ ๋ค์ค ๊ฐ๋ฐ์ ์น์ ์ผ๋ก ์ด๋ํ๋ฉด ๊ฑฐ๊ธฐ์์ ์๋ก์ด ํ๊ฒฝ์ ๋ณผ ์ ์์ต๋๋ค.
Git Branches ์น์ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ์ฐ๋ฆฌ ์ค๋ ๋๋ mr-1
ํํ
์จ์ ๋์ฐฉํ์ต๋๋ค. ๋ธ๋์น์์ ํ๊ฒฝ์ ๋ง๋ค์ด๋ณด์ mr-1
.
๋ค์ค ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ง๋ค์์ต๋๋ค. ์ด์ GitLab์ผ๋ก ๋์๊ฐ์ ์น์
์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ด์ > ํ๊ฒฝ. ๋ค์์ ๋ํ ํญ๋ชฉ์ด ํ์๋ฉ๋๋ค. dev
ะธ mr-1
.
ํญ๋ชฉ์ ์ถ๊ฐํ๊ธฐ ๋๋ฌธ์
๋๋ค. environment
์ด๋ฆ์ผ๋ก name
ะธ url
CI/CD ์์
์ผ๋ก ์ ํํฉ๋๋ค. ๊ฐ๋ฐฉํ ํ๊ฒฝ ์์ด์ฝ์ ํด๋ฆญํ๋ฉด Pantheon์ ๋ค์ค ๊ฐ๋ฐ ํ๊ฒฝ URL๋ก ์ด๋๋ฉ๋๋ค.
๋ค์ค ๊ฐ๋ฐ ์์ฑ ์๋ํ
์์น์ ์ผ๋ก ์ฌ๊ธฐ์์ ๋ฉ์ถ๊ณ ๊ฐ ๋ณํฉ ์์ฒญ์ ๋ํด ๋ค์ค ๊ฐ๋ฐ ํ๊ฒฝ์ ์์ฑํ๋ ๊ฒ๋ง ๊ธฐ์ตํ๋ฉด ๋์ง๋ง ์ด ํ๋ก์ธ์ค๋ ์๋ํ๋ ์ ์์ต๋๋ค.
Pantheon์๋ ๋ช
๋ น์ค ๋๊ตฌ๊ฐ ์์ต๋๋ค.
์ด๋ฅผ ํ
์คํธํ๋ ค๋ฉด ์๋ก์ด ๋ณํฉ ์์ฒญ์ด ํ์ํฉ๋๋ค. ๋ค์์ ์ฌ์ฉํ์ฌ ์ ๋ถ๊ธฐ๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค. git checkout -b auto-multidev-creation
.
GitLab CI/CD ์์ ์์ Terminus๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด Terminus๋ฅผ ์ฌ์ฉํ ์ธ์ฆ์ ์ํ ๋จธ์ ํ ํฐ๊ณผ Terminus๋ฅผ ์ฌ์ฉํ ์ปจํ ์ด๋ ์ด๋ฏธ์ง๊ฐ ํ์ํฉ๋๋ค.
PANTHEON_MACHINE_TOKEN
.
GitLab ํ๊ฒฝ ๋ณ์๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ์์ด๋ฒ๋ฆฐ ๊ฒฝ์ฐ ์ ์ํ ์์น๋ก ๋์๊ฐ์ธ์.
PANTHEON_SITE
.
Terminus๊ฐ ์๋ Dockerfile ๋ง๋ค๊ธฐ
Docker๋ฅผ ์ฌ์ฉํ์ง ์๊ฑฐ๋ ํ์ผ์ด ๋ง์์ ๋ค์ง ์๋ ๊ฒฝ์ฐ Dockerfile
, ๋ด ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ๊ฐ์ธ์ registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest
์ด ์น์
์ ๊ฑด๋๋ฐ์ธ์.
Terminus๋ PHP ๋ช
๋ น์ค ๋๊ตฌ์ด๋ฏ๋ก PHP ์ด๋ฏธ์ง๋ถํฐ ์์ํด ๋ณด๊ฒ ์ต๋๋ค. Composer๋ฅผ ํตํด Terminus๋ฅผ ์ค์นํ๊ณ ์์ผ๋ฏ๋ก ๋ค์์ ์ฌ์ฉํ๊ฒ ์ต๋๋ค. Dockerfile
๋ค์ ๋ด์ฉ์ด ํฌํจ๋ ๋ก์ปฌ ์ ์ฅ์ ๋๋ ํฐ๋ฆฌ์:
# Use the official Composer image as a parent image
FROM composer:1.8
# Update/upgrade apk
RUN apk update
RUN apk upgrade
# Make the Terminus directory
RUN mkdir -p /usr/local/share/terminus
# Install Terminus 2.x with Composer
RUN /usr/bin/env COMPOSER_BIN_DIR=/usr/local/bin composer -n --working-dir=/usr/local/share/terminus require pantheon-systems/terminus:"^2"
์น์
์ ์ด๋ฏธ์ง ์์ง ๋ฐ ์ ์ก์ ๋ํ ์ง์นจ์ ๋ฐ๋ฅด์ญ์์ค. ์ด๋ฏธ์ง ๋น๋ ๋ฐ ํธ์ ะฒ Dockerfile
GitLab์ผ๋ก ํธ์ํฉ๋๋ค.
์น์
์ด๊ธฐ ๋ ์ง์คํธ๋ฆฌ GitLab ํ๋ก์ ํธ์์. ๋ชจ๋ ๊ฒ์ด ๊ณํ๋๋ก ์งํ๋๋ค๋ฉด ์ฐ๋ฆฌ์ ์ด๋ฏธ์ง๋ ๊ทธ๋๋ก ์ ์ง๋ ๊ฒ์
๋๋ค. ์ด๋ฏธ์ง ํ๊ทธ์ ๋ํ ๋งํฌ๋ฅผ ๊ธฐ๋กํด ๋์ญ์์ค. ํ์ผ์ ํ์ํฉ๋๋ค. .gitlab-ci.yml
.
์น์
script
๋ฌธ์ ์ deploy:multidev
์ด(๊ฐ) ์ปค์ง๊ธฐ ์์ํ๋ฏ๋ก ๋ณ๋์ ํ์ผ๋ก ์ฎ๊ฒจ ๋ณด๊ฒ ์ต๋๋ค. ์ ํ์ผ ๋ง๋ค๊ธฐ private/multidev-deploy.sh:
#!/bin/bash
# Store the mr- environment name
export PANTHEON_ENV=mr-$CI_MERGE_REQUEST_IID
# Authenticate with Terminus
terminus auth:login --machine-token=$PANTHEON_MACHINE_TOKEN
# Checkout the merge request source branch
git checkout $CI_COMMIT_REF_NAME
# Add the Pantheon Git repository as an additional remote
git remote add pantheon $PANTHEON_GIT_URL
# Push the merge request source branch to Pantheon
git push pantheon $CI_COMMIT_REF_NAME:$PANTHEON_ENV --force
# Create a function for determining if a multidev exists
TERMINUS_DOES_MULTIDEV_EXIST()
{
# Stash a list of Pantheon multidev environments
PANTHEON_MULTIDEV_LIST="$(terminus multidev:list ${PANTHEON_SITE} --format=list --field=id)"
while read -r multiDev; do
if [[ "${multiDev}" == "$1" ]]
then
return 0;
fi
done <<< "$PANTHEON_MULTIDEV_LIST"
return 1;
}
# If the mutltidev doesn't exist
if ! TERMINUS_DOES_MULTIDEV_EXIST $PANTHEON_ENV
then
# Create it with Terminus
echo "No multidev for $PANTHEON_ENV found, creating one..."
terminus multidev:create $PANTHEON_SITE.dev $PANTHEON_ENV
else
echo "The multidev $PANTHEON_ENV already exists, skipping creating it..."
fi
์คํฌ๋ฆฝํธ๋ ๊ฐ์ธ ๋๋ ํ ๋ฆฌ์ ์์ผ๋ฉฐ deploy:multidev
ํ์ผ .gitlab-ci.yml
๊ทธ๋์ ๋ค์๊ณผ ๊ฐ์ด ๋ฐํ์ก์ต๋๋ค.
deploy:multidev:
stage: deploy
environment:
name: multidev/mr-$CI_MERGE_REQUEST_IID
url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
script:
# Run the multidev deploy script
- "/bin/bash ./private/multidev-deploy.sh"
only:
- merge_requests
์์ฑ๋ ์ปค์คํ
์ด๋ฏธ์ง์์ ์์
์ด ์ํ๋๋์ง ํ์ธํด์ผ ํ๋ฏ๋ก ์ ์๋ฅผ ์ถ๊ฐํด ๋ณด๊ฒ ์ต๋๋ค. image
๋ ์ง์คํธ๋ฆฌ URL์์ ๋ค์์ผ๋ก .gitlab-ci.yml
. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ํ์ผ์ ๊ฐ๊ฒ ๋์์ต๋๋ค. .gitlab-ci.yml
:
image: registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest
stages:
- deploy
before_script:
# See https://docs.gitlab.com/ee/ci/ssh_keys/README.html
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add - > /dev/null
- mkdir -p $HOME/.ssh && echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config"
- git config --global user.email "$GITLAB_USER_EMAIL"
- git config --global user.name "Gitlab CI"
deploy:dev:
stage: deploy
environment:
name: dev
url: https://dev-$PANTHEON_SITE.pantheonsite.io/
script:
- git remote add pantheon $PANTHEON_GIT_URL
- git push pantheon master --force
only:
- master
deploy:multidev:
stage: deploy
environment:
name: multidev/mr-$CI_MERGE_REQUEST_IID
url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
script:
# Run the multidev deploy script
- "/bin/bash ./private/multidev-deploy.sh"
only:
- merge_requests
์ถ๊ฐ, ์ปค๋ฐ ๋ฐ ๋ณด๋ด๊ธฐ private/multidev-deploy.sh
ะธ .gitlab-ci.yml
. ์ด์ GitLab์ผ๋ก ๋์๊ฐ์ CI/CD ์์
์ด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค. ์ธ๋ด์ฌ์ ๊ฐ์ง์ญ์์ค. ๋ค์ค ๊ฐ๋ฐ์๋ ์์ฑํ๋ ๋ฐ ๋ช ๋ถ์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ Pantheon์ ๋ค์ค ๊ฐ๋ฐ์ ๋ชฉ๋ก์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ค ๊ธฐ์ ์ด๋ค! ๋ค์ค๊ฐ๋ฐ ํ๊ฒฝ mr-2
์ด๋ฏธ ์ฌ๊ธฐ์.
๊ฒฐ๋ก
์ฐ๋ฆฌ ํ์ ๋ณํฉ ์์ฒญ์ ์ด๊ณ ์๋์ผ๋ก ํ๊ฒฝ์ ์์ฑํ๊ธฐ ์์ํ๋ฉด์ ํจ์ฌ ๋ ์ฆ๊ฑฐ์ด ์๊ฐ์ ๋ณด๋์ต๋๋ค.
GitLab๊ณผ Pantheon์ ๊ฐ๋ ฅํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด GitLab์ Pantheon์ ์๋์ผ๋ก ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
GitLab CI/CD๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ์ํฌํ๋ก๊ฐ ์ฑ์ฅํ ์ฌ์ง๊ฐ ์์ต๋๋ค. ์์ํ๋ ๋ฐ ๋์์ด ๋๋ ๋ช ๊ฐ์ง ์์ด๋์ด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋น๋ ๋จ๊ณ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
- ์๋ํ๋ ํ ์คํธ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
- ์ฝ๋ ํ์ค์ด ์ถฉ์กฑ๋๋์ง ํ์ธํ๋ ์์ ์ ์ถ๊ฐํฉ๋๋ค.
- ์ถ๊ฐ
๋์ ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์ ํ ์คํธ .
GitLab, Pantheon ๋ฐ ์๋ํ์ ๋ํ ๊ทํ์ ์๊ฐ์ ์๋ ค์ฃผ์ญ์์ค.
PS Pantheon์ ๋ช
๋ น์ค ๋๊ตฌ์ธ Terminus๊ฐ
Pantheon์์๋ ๋ฒ์ 2๋ฅผ ํ๋ฅญํ๊ฒ ์ํํ์ต๋๋ค. build:project:create
Pantheon ํ ํฐ๊ณผ GitLab ํ ํฐ๋ง ํ์ํฉ๋๋ค. ๊ทธ๋
๋ Composer ๋ฐ ์๋ํ๋ ํ
์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ํ ํ๋ก์ ํธ ์ค ํ๋๋ฅผ ๋ฐฐํฌํ๊ณ ์๋ก์ด Pantheon ์ฌ์ดํธ์ธ GitLab์์ ์ ํ๋ก์ ํธ๋ฅผ ์์ฑํ ํ ํ๊ฒฝ ๋ณ์ ๋ฐ SSH ํค๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐํฉ๋๋ค.
ะะฑ ะฐะฒัะพัะต
Andrew Taylor๋ ๊ฐ๋ฐ์๋ฅผ ์ํ ๋๊ตฌ๋ฅผ ๋ง๋ญ๋๋ค.
์ถ์ฒ : habr.com