- 前提条件
- プロジェクトファイルを作成します。
- Dockerイメージの選択
- Jekyllのインストール
- 出力用の
public
ディレクトリを指定します。 - アーティファクトの
public
ディレクトリを指定します。 - デプロイしてウェブサイトを表示します。
- CI/CDファイルの他のオプション
- 関連するトピック
チュートリアルGitLab Pages ウェブサイトをゼロから作る
このチュートリアルでは、JekyllStatic Site Generator(SSG)を使ってゼロから Pages サイトを作成する方法を紹介します。空白のプロジェクトから始め、独自のCI/CD設定ファイルを作成し、ランナーに指示を与えます。CI/CDパイプラインが実行されると、Pagesサイトが作成されます。
この例ではJekyllを使用していますが、他のSSGも同様のステップを踏みます。このチュートリアルを完了するには、JekyllやSSGに精通している必要はありません。
GitLab Pagesウェブサイトを作成するには:
- ステップ 1: プロジェクトファイルを作成します。
- ステップ2: Dockerイメージを選択します。
- ステップ3: Jekyllのインストール
- ステップ4:出力の
public
ディレクトリを指定します。 - ステップ5:アーティファクトの
public
ディレクトリを指定します。 - ステップ 6: デプロイしてウェブサイトを表示します。
前提条件
GitLabに空のプロジェクトがあること。
プロジェクトファイルを作成します。
ルート(トップレベル)ディレクトリに3つのファイルを作成します:
-
.gitlab-ci.yml
:実行したいコマンドを含むYAMLファイル。今のところ、ファイルの内容は空白のままにしておきます。 -
index.html
:好きなHTMLコンテンツを入力できるHTMLファイル:<html> <head> <title>Home</title> </head> <body> <h1>Hello World!</h1> </body> </html>
-
Gemfile
:Rubyプログラムの依存関係を記述したファイル。この内容を入力してください:
source "https://rubygems.org" gem "jekyll"
Dockerイメージの選択
この例では、RunnerはDockerイメージを使用してスクリプトを実行し、サイトをデプロイします。
この特定のRubyイメージはDockerHubでメンテナーされています。
.gitlab-ci.yml
ファイルを編集し、最初の行に次のテキストを追加してください:
image: ruby:2.7
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
。 A job
には、特定のタスクに適用するスクリプトと設定が含まれています。
job:
script:
- gem install bundler
- bundle install
- bundle exec jekyll build
GitLab Pagesの場合、このjob
はpages
という特定の名前を持っています。この設定は、ジョブに GitLab Pages を使ってウェブサイトをデプロイさせたいことを Runner に伝えます:
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:2.7
pages:
script:
- gem install bundler
- bundle install
- bundle exec jekyll build -d public
artifacts:
paths:
- public
デプロイしてウェブサイトを表示します。
前述の手順を完了したら、ウェブサイトをデプロイします:
-
.gitlab-ci.yml
ファイルを保存してコミットします。 - Build > Pipelinesでパイプラインを確認します。
- パイプラインが完了したら、[デプロイ] > [Pages]でPagesウェブサイトへのリンクを探します。
このpages
ジョブが正常に完了すると、パイプラインビューに特別なpages:deploy
ジョブが表示されます。これは GitLab Pages デーモンのためにウェブサイトのコンテンツを準備します。GitLab はこのジョブをバックグラウンドで実行し、Runner は使いません。
CI/CDファイルの他のオプション
より高度な作業を行いたい場合は、.gitlab-ci.yml
利用可能な設定を使ってファイルを .gitlab-ci.yml
更新することができます。GitLabに含まれているCI Lintツールでファイルを.gitlab-ci.yml
検証することが .gitlab-ci.yml
できます。
次のトピックでは、CI/CD ファイルに追加できるその他のオプションの例を示します。
Pages サイトへの特定のブランチのデプロイ
特定のブランチからのみPagesサイトにデプロイしたい場合があります。
まず、workflow
セクションを追加して、変更がブランチにプッシュされたときだけパイプラインを実行するようにします:
image: ruby:2.7
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:2.7
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のデフォルトステージは、ビルド、テスト、デプロイの3つです。
本番環境にデプロイする前にスクリプトをテストしてビルドしたサイトをチェックしたい場合は、デフォルトのブランチ(ここではmain
) にプッシュしたときとまったく同じようにテストを実行することができます。
ジョブの実行ステージを指定するには、CI ファイルにstage
行を追加します:
image: ruby:2.7
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:2.7
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:2.7
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
を実行すると、vendor
ディレクトリにJekyllの依存関係をキャッシュします:
image: ruby:2.7
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
ディレクトリを除外する必要があります。そうでなければ、Jekyllはサイトと一緒にディレクトリの内容を構築しようとします。
ルートディレクトリに、_config.yml
というファイルを作成し、このコンテンツを追加します:
exclude:
- vendor
これでGitLab CI/CDはウェブサイトをビルドするだけでなく、次のようなこともできるようになりました:
- 機能ブランチに継続的にテストをプッシュします。
- Bundlerでインストールされた依存関係をキャッシュします。
-
main
ブランチへのすべてのプッシュを継続的にデプロイします。
サイト用に作成された HTML やその他のアセットを見るには、ジョブのアーティファクトをダウンロードしてください。