GitLab Pagesで静的コンテンツを公開する
GitLabについては/tag/gitlabを参照されたい
GitHubにおいてMavenリポジトリを公開する方法をGitHubにMavenリポジトリを作り、GitHub Pagesで公開するに書いたのだが、GitLabにもPagesというものがあり、同じようなことができる。つまり、
「https://ysugimura.gitlab.io/foobar/」などというURLで静的コンテンツを公開できる。
しかし、masterにpushすればそのまま公開されるGitHubとは少々異なり、GitLabではひと手間が必要だ。
なお、GitLabではGitHubとは異なり、masterの内容にGitLab側で何らかの操作を加えた後に公開することができるようだが、ここではあくまでも、最も簡単な「静的コンテンツをそのまま公開する」ことに注力する。
- foobarプロジェクトを作成する
- foobarのトップに「.gitlab-ci.yml」というファイルを作成する。
- あとは好きなコンテンツを置く。
ということになる。
foobarプロジェクトを作成する
これは問題無いと思うので省略する。なおプロジェクトはPrivateのままでも構わない。リポジトリの内容がそのまま公開されるわけではないからだ。
ファイルを作成する
「.gitlab-ci.yml」および「index.html」というファイルを作成する。
.gitlab-ci.ymlの内容は以下になる。詳しくはわからないが、単純に置いたものをそのまま公開するというものらしい。publicという名前はGitLab内部で使われるもののようで、こちらには関係無い。
pages:
stage: deploy
script:
- mkdir .public
- cp -r * .public
- mv .public public
artifacts:
paths:
- public
only:
- master
index.htmlは、もちろん何でも良いが例えば以下。
<html>
<body>
this is foobar
</body>
</html>
これを例えばEclipse上で作成した場合のイメージは以下だ(注意:ドットから始まるリソースファイルも表示されるようにしている)。
コミットの後にプッシュする。
静的コンテンツのコピーの実行
以下のようにコピー実行中の表示がされるのだが、これが意外に時間がかかる。単にコピーするだけなのに。
成功すると「成功」の表示になる。
アクセスしてみる
「https://ysugimura.gitlab.io/foobar/」にアクセスすると、意図通りの表示になる。
コンテンツを変更・追加した場合
コンテンツを変更・追加した場合には単にプッシュしてやればよい。このとき、特に.gitlab-ci.ymlを変更する必要は無い。自動で先のCI/CD>ジョブに(最初は)「実行待ち」と表示され、次に「実行中」、「成功」の表示になる。
反映が非常に遅い場合もある
上記で「成功」の表示が出た後でも、反映されるのが非常に遅い場合もあるようだ。何らかのエラーがあるのか、正常で遅いのかがわからないのでイライラする。
以下では、数時間、24時間経過しても404エラーになると言う人が続出している。主に2017年の議論だ。
2019/5/21に試してみたところ、10分程度で表示された。改良はされているのかもしれないが、いずれにしても「すぐに」結果を確認することはできないようだ。
「遅い」理由
これほど遅い理由としては、GitLab PagesがCI/CDの一部として実現されているかららしい。CI/CDというのは要するにこういうことだ。
- 大勢の開発者がおり、一つのソフトウェアを開発している場合に、
- 誰かがリポジトリに書き込んだら、最終的な成果を作成すべくビルドが開始される。
- それなりに時間がかかる。
- そのビルド結果が開発者に通知される。
という、そもそもはソフトウェア構築向けのものであって、今回のような「単純に静的コンテンツを書き込んで、それを公開するだけ!」というものではないらしい。
本来はそのような複雑なことをするためのものであるがゆえに、GitLabの中での「処理の順番待ち」が発生してしまうのだろう。
ちなみに、そういった「ソフトウェア構築」の場合には、GitLab Pagesなどで公開されてはならないのだが、もちろんデフォルトで公開されるわけではなく、.gitlab-ci.ymlの中に「公開しろ」と指示してあるから公開されたわけだ。
。。。と解釈したのだが、間違いがあるかもしれない。あしからず。
Gitlab PagesをMavenリポジトリとして使う場合
ちなみにだが、これをMavenリポジトリとして使うのも非常に簡単だ。
gradleの場合には、以下を設定して、publishを行い、foobarプロジェクトに対してアーティファクトを出力してやり、その後は単純にfoobarをコミットしてプッシュすればよい。
apply plugin: 'maven-publish'
....
publishing {
publications {
target(MavenPublication) {
groupId 'groupId'
artifactId 'artifactId'
version 'version'
from components.java
artifact sourceJar
}
}
repositories {
maven {
// foobarプロジェクトの場所
url 'file:///C:/devel/workspace/foobar'
}
}
}
Gitlab Pagesをプライベートにしたい
つまり、Gitlab Pagesを公開してしまうのではなく、限られたメンバーだけが見れるようにすることなのだが、オープンソースのGitlabにはこの機能があるようだがgitlab.comではできないようだ(2019/6時点)。
https://docs.gitlab.com/ee/user/project/pages/introduction.htmlのGitlab Access Controlの項に説明がある。
Note: GitLab Pages access control is not activated on GitLab.com. You can check its progress on the infrastructure issue tracker.