GitBucketのgitbucket-ci-pluginからactを呼んでGitHub ActionsのCI設定を使い回す
GitBucketにCIを仕込みたい場合は、
「gitbucket-ci-plugin」が利用出来るのですが、
個々にシェルスクリプトを書くよりも、
GitHub Actionsと同じような設定ファイルで設定できる方が、
ノウハウを使い回すことが出来て都合が良いと考えました。
「act」というGitHubActionsのローカルランナーを
「gitbucket-ci-plugin」から呼び出すことで、
ある程度は実現できたので、手順をメモを残しておきます。
gitbucket | GitHub
https://github.com/gitbucket/gitbucket
gitbucket-ci-plugin | GitHub
https://github.com/takezoe/gitbucket-ci-plugin
act | GitHub
https://github.com/nektos/act
環境は、Ubuntu Linux Server 22.04 (amd64) です。
Javaのセットアップ
Java1.8をインストールします。
sudo apt-get update
sudo apt-get install openjdk-8-jre
インストール出来たことを確認します。
/usr/lib/jvm/java-8-openjdk-amd64/bin/java -version
PostgreSQLのセットアップ
PostgreSQLのセットアップをインストールします。
sudo apt-get install postgresql
PostgreSQLのステータスを確認します。
sudo systemctl status postgresql
GitBucketのセットアップ
GitBucketのセットアップは次のドキュメントを参考にすすめます。
- https://github.com/gitbucket/gitbucket/wiki/Install-as-a-systemd-Service
- https://github.com/gitbucket/gitbucket/wiki/Installation-on-a-Raspberry-Pi
ユーザの作成
GitBucketの実行ユーザを作ります。
sudo groupadd -g 555 gitbucket
sudo useradd -g gitbucket --no-user-group --home-dir /opt/gitbucket --no-create-home --shell /usr/sbin/nologin --system --uid 555 gitbucket
GitBucketのダウンロード
GitBucketをダウンロードします。
sudo mkdir /opt/gitbucket
cd /opt/gitbucket
sudo wget https://github.com/gitbucket/gitbucket/releases/download/4.38.2/gitbucket.war
sudo chown -R gitbucket:gitbucket /opt/gitbucket
serviceの設定
systemctlで実行できるようにサービスを作成します。
設定ファイルを作ります。
sudo vi /etc/systemd/system/gitbucket.service
/etc/systemd/system/gitbucket.service ファイルの内容:
# GitBucket Service
[Unit]
Description=Manage Java service
[Service]
WorkingDirectory=/opt/gitbucket
ExecStart=/usr/lib/jvm/java-8-openjdk-amd64/bin/java -Xms128m -Xmx256m -jar gitbucket.war
User=gitbucket
Group=gitbucket
Type=simple
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
設定をリロード、サービスを開始します。
sudo systemctl daemon-reload
sudo systemctl enable gitbucket
sudo systemctl start gitbucket
Webサイトが閲覧できることを確認します。
curl http://127.0.0.1:8080/
DBの設定
データベースの設定は、次のドキュメントを参考にすすめます。
PostgreSQLにpostgresユーザで接続します。
sudo su - postgres
psql
PostgreSQLにデータベースを作成、権限追加を行います。
CREATE DATABASE gitbucket;
CREATE USER gitbucket WITH ENCRYPTED PASSWORD '{gitbucketユーザのパスワード}';
GRANT ALL PRIVILEGES ON DATABASE gitbucket TO gitbucket;
GRANT CONNECT ON database gitbucket to gitbucket;
データベースへの接続設定ファイルを編集します。
sudo vi /opt/gitbucket/.gitbucket/database.conf
/opt/gitbucket/.gitbucket/database.conf ファイルの内容:
db {
url = "jdbc:postgresql://localhost/gitbucket"
user = "gitbucket"
password = "{gitbucketユーザのパスワード}"
}
GitBucketを再起動します。
sudo systemctl restart gitbucket
gitbucket-ci-pluginのセットアップ
gitbucket-ci-pluginをpluginsディレクトリにダウンロードします。
cd /opt/gitbucket/.gitbucket/plugins
sudo wget https://github.com/takezoe/gitbucket-ci-plugin/releases/download/1.11.0/gitbucket-ci-plugin-1.11.0.jar
sudo chown gitbucket:gitbucket gitbucket-ci-plugin-1.11.0.jar
dockerのセットアップ
dockerのセットアップは、次のドキュメントを参考にすすめます。
- https://docs.docker.jp/engine/installation/linux/docker-ce/ubuntu.html
- https://docs.docker.com/desktop/install/ubuntu/
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get update
sudo apt-get install docker-ce
dockerサービスのステータスを確認します。
sudo systemctl status docker
actのセットアップ
actをインストールします。
sudo mkdir /opt/act && cd $_
curl https://raw.githubusercontent.com/nektos/act/master/install.sh | sudo bash
actがインストールできたことを確認します。
/opt/act/bin/act --version
GitBucketからactを実行する設定
actはdockerを利用するので、
gitbucketユーザがdockerを使えるようにします。
dockerグループにgitbuketユーザを追加します。
sudo gpasswd -a gitbucket docker
gitbucketサービスを再起動します。
sudo service gitbucket restart
actのcache用のディレクトリを用意します。
sudo mkdir -p /opt/gitbucket/.cache/act
sudo chown gitbucket:gitbucket /opt/gitbucket/.cache/act
actの設定ファイルを用意します。
sudo vi /opt/gitbucket/.actrc
/opt/gitbucket/.actrc ファイルの内容:
-P ubuntu-latest=catthehacker/ubuntu:act-latest
actの設定ファイルの所有ユーザをgitbucketにしておきます。
sudo chown gitbucket:gitbucket /opt/gitbucket/.actrc
GitBucketへのCI設定
GitBucketにリポジトリを作ります。
Setting -> Build と辿り、
Enable buildにチェック、Build scriptに以下の内容を指定します。
mkdir -p $HOME/.cache
ln -s /opt/gitbucket/.cache/act $HOME/.cache/act
ln -s /opt/gitbucket/.actrc $HOME/.actrc
/opt/act/bin/act
リポジトリ上の .github/workflows 配下にyamlファイルを追加して、
GitBucketにpushすると、GitHub Actionsと同様のCIが実行されます。
上記のBuild scriptでは、常にpushした場合のCIが実行されますが、
環境変数に応じてactのパラメータを変更すれば、
masterへのmerge時のみデプロイする(CD)ようにもできると思います。
以上。