Github-Giteaで互換性を保ちながらActionを実行させれるみたい
4 min read
こんにちは、無能です。
やっていることはほとんどGitea Actionsの導入です。
Gitea Actionsの実行環境を整える
ほとんど以下とやっていること変わらないのですが
Gitea Actionsが来てるやんけ
ちなみにapp.ini
で[actions]
をENABLED=true
にしなくてもデフォでOnになっているようです。
導入時Ver
$ gitea -v
Gitea version 1.22.4 built with GNU Make 4.3, go1.22.9 : bindata, sqlite, sqlite_unlock_notify
hetzner上のDebianのapt
で入れたGo
のバージョンが古くてビルドするときに怒られたので最新版のGo
を入れます。
wget https://go.dev/dl/go1.23.4.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.23.4.linux-amd64.tar.gz
exec bash
go version
で、このときにまだapt remove
したけど/usr/bin/go
を見ていたことと、パス渡し忘れていたのでパスを設定。
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
rm /usr/bin/go
exec bash
go version
Gitea Actionsのランナーをビルド
別のデーモンとして稼働させている必要あるのと、docker
も必要なので入れていきます。
apt install -y make docker.io
service docker status
git clone https://gitea.com/gitea/act_runner
cd act_runner/
make build
mv ./act_runner /usr/local/bin
exec bash
act_runner registerで紐付け
おそらく、これを本体のGitea
のバイナリと別けている理由がこの時点でわかりました。
Gitea
自体をホストしているサーバーと別のサーバーに簡単にGitea Actions
を実行させる環境を分ける為なのかなと思います。
# act_runner register
INFO Registering runner, arch=amd64, os=linux, version=v0.2.11+6-g8bc0275.
INFO Enter the Gitea instance URL (for example, https://gitea.com/):
https://git.domain.tld/
INFO Enter the runner token:
Secret key
INFO Enter the runner name (if set empty, use hostname: debian-2gb-hel1-1):
danzig
INFO Enter the runner labels, leave blank to use the default labels (comma-separated, for example, ubuntu-latest:docker://gitea/runner-images:ubuntu-latest):
INFO Registering runner, name=danzig, instance=https://git.domain.tld/, labels=[ubuntu-latest:docker://gitea/runner-images:ubuntu-latest ubuntu-22.04:docker://gitea/runner-images:ubuntu-22.04 ubuntu-20.04:docker://gitea/runner-images:ubuntu-20.04].
DEBU Successfully pinged the Gitea instance server
INFO Runner registered successfully.
ちなみに、Runnerに渡すトークンの取得に関しては前述のサイトとは異なっており現在は
https://git.domain.tld/admin/actions/runners
になっていました。
しょうもないですが、runner nameをdanzigにしているのはMisfitsのボーカルの名前にしました。
裏でグレン・ダンジグがビルド作業していることを考えたら面白いので。
apparmorを入れないといけないっぽい
どうやら、必要なモジュールが足りないようです。
SE Linux
とは別のLinux Security Modules
が必要らしいです。
ということで入れます。
apt install -y apparmor apparmor-utils
で、問題のact_runnerのデーモン用の実行バイナリをどうするかっていうことなんですが一旦テスト期間中としてrc.local
にいれてスタートアップだけするようにしました。
理由はSystemd
だとか、Supervisord
に最初っからつっこんで途中でデーモンが死んだときの確認のしようがめんどくさくなりそうなので、死ぬときはキレイに死んでくれた方があとからデーモン死んだログをnohup.out
みるだけでよさそうなので見つけやすそうかなっていうだけです。
以下を/etc/rc.local
に記述
nohup act_runner daemon &
そしてDocker
デーモンを再起動。
service docker restart
ちなみに自分がほとんどsystemctl
ほとんど使わないのは汎用的で他のディストリビューションやBSD環境でも同様に使えるからです。
yamlを編集
ぶっちゃけactions/checkout@v4
が明示的じゃないのに動いているのはどこの先を見ているのかイマイチ理解出来ないけどログみていたら、うまいことact_runner
側でこの構文を理解してくれるように直しているようだ。
なので、act_runner
側で持っている何かしらのactions/checkout@v4
のミラー的な資産ではなくちゃんとGithub上の資産を使っている様子。
# This workflow will build a golang project
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-go
name: Go
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v4
with:
go-version: '1.23.3'
- name: Build
run: go build -v ./...
- name: Test
run: go test -v ./...
Qiitaの記事だとactions/checkout@v4
のとこ以外は明示的にURLをフルで指定してあげる必要があるからname: Set up Go
のuses
で指定しているURLはフルで指定したけど、前述の通りで行くならVer上がってる今ならもしかしたらうまいことGithub資産として認識してくれるのかな?
と思ったけどそうするとGitea
上にある資産と競合したときに問題が起きそうなのでURLのフル指定したほうが問題はお気なさそうですね。
※追記
どうやらowner/repo@ref
のままでもGithub, Giteaどちらも通るみたいなので、なんも考えずにいけそうです。
無事動作
やったぜ!!!!
というわけで、今回はここまで。
またよろしくお願いいたします。