- 전제 조건
- 프로젝트 파일 생성
- Docker 이미지 선택
- Jekyll 설치
public
디렉토리의 출력 지정public
디렉토리의 아티팩트 지정- 웹사이트 배포 및 확인
- CI/CD 파일의 다른 옵션
- 관련 주제
튜토리얼: 처음부터 GitLab Pages 웹사이트 만들기
이 튜토리얼에서는 Jekyll 정적 사이트 생성기(SSG)를 사용하여 처음부터 페이지 사이트를 만드는 방법을 보여줍니다. 빈 프로젝트로 시작하여 독자의 CI/CD 구성 파일을 만들고, 이 파일은 런너에 명령을 전달합니다. CI/CD 파이프라인이 실행되면 페이지 사이트가 생성됩니다.
이 예시에서는 Jekyll을 사용하지만, 다른 SSGs도 유사한 단계를 따릅니다. 이 튜토리얼을 완료하려면 Jekyll이나 SSG에 익숙할 필요가 없습니다.
GitLab Pages 웹사이트를 만들려면 다음을 수행하세요:
- 단계 1: 프로젝트 파일 생성
- 단계 2: Docker 이미지 선택
- 단계 3: Jekyll 설치
- 단계 4:
public
디렉토리의 출력 지정 - 단계 5:
public
디렉토리의 아티팩트 지정 - 단계 6: 웹사이트 배포 및 확인
전제 조건
GitLab에 빈 프로젝트가 있어야 합니다.
프로젝트 파일 생성
루트(최상위) 디렉토리에 세 개의 파일을 만듭니다:
-
.gitlab-ci.yml
: 명령어가 포함된 YAML 파일입니다. 현재는 파일 내용을 비워둡니다. -
index.html
: HTML 콘텐츠를 자유롭게 채울 수 있는 HTML 파일입니다. 예를 들어 다음과 같이 작성할 수 있습니다:<html> <head> <title>Home</title> </head> <body> <h1>Hello World!</h1> </body> </html>
-
Gemfile
: 루비 프로그램의 종속성을 설명하는 파일입니다.다음 내용으로 작성합니다:
source "https://rubygems.org" gem "jekyll"
Docker 이미지 선택
이 예시에서 러너는 스크립트를 실행하고 사이트를 배포하기 위해 Docker 이미지를 사용합니다.
특정한 Ruby 이미지는 DockerHub에서 유지보수됩니다.
.gitlab-ci.yml
파일을 편집하고 다음 텍스트를 첫 번째 줄로 추가합니다:
image: ruby:3.2
만약 SSG가 빌드를 위해 NodeJS가 필요한 경우, 파일 시스템의 일부로 NodeJS를 포함하는 이미지를 지정해야 합니다. 예를 들어 Hexo 사이트의 경우 image: node:12.17.0
를 사용할 수 있습니다.
Jekyll 설치
로컬에서 Jekyll을 실행하려면 설치해야 합니다:
- 터미널을 엽니다.
-
gem install bundler
를 실행하여 Bundler를 설치합니다. -
bundle install
을 실행하여Gemfile.lock
을 생성합니다. -
bundle exec jekyll build
를 실행하여 Jekyll을 설치합니다.
프로젝트에서 Jekyll을 실행하려면 .gitlab-ci.yml
파일을 수정하고 설치 명령어를 추가합니다:
script:
- gem install bundler
- bundle install
- bundle exec jekyll build
또한, .gitlab-ci.yml
파일에서 각 script
는 job
에 의해 구성됩니다. job
에는 해당 작업에 적용할 스크립트와 설정이 포함됩니다.
job:
script:
- gem install bundler
- bundle install
- bundle exec jekyll build
GitLab Pages를 위해 이 job
에는 pages
라는 특정한 이름이 있습니다. 이 설정은 러너에게 웹사이트를 GitLab Pages로 배포하길 원한다는 것을 알려줍니다:
pages:
script:
- gem install bundler
- bundle install
- bundle exec jekyll build
public
디렉토리의 출력 지정
Jekyll은 출력을 생성할 위치를 알아야 합니다. GitLab Pages에서는 public
이라는 디렉토리에 있는 파일만 고려합니다.
Jekyll은 -d
목적지 플래그를 사용하여 구축된 웹사이트의 출력 디렉토리를 지정합니다. .gitlab-ci.yml
파일에 목적지를 추가합니다:
pages:
script:
- gem install bundler
- bundle install
- bundle exec jekyll build -d public
public
디렉토리의 아티팩트 지정
이제 Jekyll이 파일을 public
디렉토리에 출력했으므로, 러너는 이를 가져올 위치를 알아야 합니다. 아티팩트는 public
디렉토리에 저장됩니다:
pages:
script:
- gem install bundler
- bundle install
- bundle exec jekyll build -d public
artifacts:
paths:
- public
당신의 .gitlab-ci.yml
파일은 이제 다음과 같아야 합니다:
image: ruby:3.2
pages:
script:
- gem install bundler
- bundle install
- bundle exec jekyll build -d public
artifacts:
paths:
- public
웹사이트 배포 및 확인
이전 단계를 완료한 후, 웹사이트를 배포하세요:
-
.gitlab-ci.yml
파일을 저장하고 커밋하세요. - Build > 파이프라인으로 이동하여 파이프라인을 확인하세요.
- 파이프라인이 완료되면 배포 > 페이지로 이동하여 페이지 웹사이트의 링크를 찾으세요.
pages
작업이 성공적으로 완료되면, 파이프라인 뷰에 특별한 pages:deploy
작업이
나타납니다. 이 작업은 GitLab Pages 데몬을 위해 웹사이트의 콘텐츠를 준비합니다.
GitLab은 이를 백그라운드에서 실행하며 러너(runner)를 사용하지 않습니다.
CI/CD 파일의 다른 옵션
더 고급 작업을 원한다면, .gitlab-ci.yml
파일에
다른 CI/CD YAML 키워드들을 업데이트할 수 있습니다.
GitLab에 포함된 CI Lint 도구로
.gitlab-ci.yml
파일을 유효성 검사할 수 있습니다.
다음 주제에서는 CI/CD 파일에 추가할 수 있는 다른 옵션 예제를 보여줍니다.
특정 브랜치를 페이지 사이트로 배포
특정 브랜치에서만 페이지 사이트로 배포하고 싶을 수 있습니다.
먼저, 변경 사항이
브랜치에 푸시될 때만 파이프라인을 실행하도록 workflow
섹션을 추가하세요:
image: ruby:3.2
workflow:
rules:
- if: $CI_COMMIT_BRANCH
pages:
script:
- gem install bundler
- bundle install
- bundle exec jekyll build -d public
artifacts:
paths:
- public
그런 다음 파이프라인이
기본 브랜치 (여기서 main
)에서
작업을 실행하도록 구성하세요.
image: ruby:3.2
workflow:
rules:
- if: $CI_COMMIT_BRANCH
pages:
script:
- gem install bundler
- bundle install
- bundle exec jekyll build -d public
artifacts:
paths:
- public
rules:
- if: $CI_COMMIT_BRANCH == "main"
배포할 단계 지정
GitLab CI/CD에는 빌드(build), 테스트(test), 배포(deploy)를 위한 세 가지 기본 단계가 있습니다.
프로덕션으로 배포하기 전에 스크립트를 테스트하고
생성된 사이트를 확인하려면,
기본 브랜치 (여기서 main
)로 푸시될 때의
테스트를 정확히 실행할 수 있습니다.
작업이 실행될 단계를 지정하려면,
CI 파일에 stage
줄을 추가하세요:
image: ruby:3.2
workflow:
rules:
- if: $CI_COMMIT_BRANCH
pages:
stage: deploy
script:
- gem install bundler
- bundle install
- bundle exec jekyll build -d public
artifacts:
paths:
- public
rules:
- if: $CI_COMMIT_BRANCH == "main"
environment: production
이제 CI 파일에 다른 작업을 추가하여,
main
브랜치 이외의 모든 브랜치에 대해
테스트하도록 지시하세요:
image: ruby:3.2
workflow:
rules:
- if: $CI_COMMIT_BRANCH
pages:
stage: deploy
script:
- gem install bundler
- bundle install
- bundle exec jekyll build -d public
artifacts:
paths:
- public
rules:
- if: $CI_COMMIT_BRANCH == "main"
environment: production
test:
stage: test
script:
- gem install bundler
- bundle install
- bundle exec jekyll build -d test
artifacts:
paths:
- test
rules:
- if: $CI_COMMIT_BRANCH != "main"
test
작업이 test
단계에서 실행되면 Jekyll은
test
라는 디렉토리에 사이트를 빌드합니다. 이 작업은
main
을 제외한 모든 브랜치에 영향을 미칩니다.
다른 작업에 대해 단계를 적용하면 동일한 단계에 있는 모든 작업이 병렬로 실행됩니다. 웹 애플리케이션이 배포되기 전에 여러 테스트가 필요한 경우, 모든 테스트를 동시에 실행할 수 있습니다.
중복 명령 제거
각 작업에서 동일한 스크립트를 중복해서 추가하는 것을 피하려면,
before_script
섹션에 해당 스크립트를 추가할 수 있습니다.
예를 들어, gem install bundler
와 bundle install
은 pages
와 test
두 작업에 대해 실행되고 있었습니다.
이러한 스크립트를 before_script
섹션으로 이동하세요:
image: ruby:3.2
workflow:
rules:
- if: $CI_COMMIT_BRANCH
before_script:
- gem install bundler
- bundle install
pages:
stage: deploy
script:
- bundle exec jekyll build -d public
artifacts:
paths:
- public
rules:
- if: $CI_COMMIT_BRANCH == "main"
environment: production
test:
stage: test
script:
- bundle exec jekyll build -d test
artifacts:
paths:
- test
rules:
- if: $CI_COMMIT_BRANCH != "main"
캐시된 종속성으로 더 빠르게 빌드하기
빌드를 더 빠르게 하려면 cache
매개변수를 사용하여 프로젝트의 종속성 설치 파일을 캐시할 수 있습니다.
다음 예는 bundle install
을 실행할 때 Jekyll 종속성을 vendor
디렉터리에 캐시하는 방법입니다.
image: ruby:3.2
workflow:
rules:
- if: $CI_COMMIT_BRANCH
cache:
paths:
- vendor/
before_script:
- gem install bundler
- bundle install --path vendor
pages:
stage: deploy
script:
- bundle exec jekyll build -d public
artifacts:
paths:
- public
rules:
- if: $CI_COMMIT_BRANCH == "main"
environment: production
test:
stage: test
script:
- bundle exec jekyll build -d test
artifacts:
paths:
- test
rules:
- if: $CI_COMMIT_BRANCH != "main"
이 경우에는 Jekyll이 디렉터리의 내용을 사이트와 함께 빌드하려고 시도하지 않도록 /vendor
디렉터리를 제외해야 합니다.
루트 디렉터리에서 _config.yml
이라는 파일을 만들고 다음 내용을 추가해야 합니다.
exclude:
- vendor
이제 GitLab CI/CD는 웹 사이트를 빌드하는 것뿐만 아니라 다음을 수행합니다.
- feature 브랜치에 대한 지속적인 테스트를 수행하는 푸시.
- Bundler로 설치된 종속성을 캐시합니다.
-
main
브랜치로의 모든 푸시를 지속적으로 배포합니다.
사이트를 위해 생성된 HTML 및 기타 에셋을 확인하려면 작업 artifact를 다운로드하세요.
관련 주제
- 스테이징 및 프로덕션에 웹 앱을 배포
- 작업을 순차적, 병렬로 실행하거나 사용자 정의 파이프라인 빌드
- 다른 프로젝트에서 특정 디렉터리를 가져오기
- 코드 커버리지 보고서 생성을 위해 GitLab Pages 사용(https://about.gitlab.com/blog/2016/11/03/publish-code-coverage-report-with-gitlab-pages/)