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のセットアップは次のドキュメントを参考にすすめます。

ユーザの作成

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のセットアップは、次のドキュメントを参考にすすめます。

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)ようにもできると思います。

以上。