Gitea Actionsをトライしてみる
Giteaのv1.19.0でGitea Actionsがリリースされたので、試してみました。
気軽にテストしたかったので、全てdocker-composeの環境です。
ランナーはact_runner
のリポジトリに入っているようで、
Dockerファイルもあるだろうし、いけるだろうと判断しました。
ちなみにブログにはこう記載してあったので普通に行けそう
Currently, the only way to install act runner is by compiling it yourself, or by using one of the pre-built binaries. There is no Docker image or other type of package management yet. At the moment, act runner should be run from the command line. Of course, you can also wrap this binary in something like a system service, supervisord, or Docker container.
Let's try!
とりあえずGiteaのセットアップから
デフォルトでは無効化されているので、アクティベートをしていきます
services:
gitea:
image: gitea/gitea
restart: always
container_name: gitea
volumes:
- ./gitea/data:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- 3000:3000
# - 2222:22 # pushはhttp経由でいいやと思ったのでコメントアウト
environment:
GITEA__database__DB_TYPE: postgres
GITEA__database__HOST: db:5432
GITEA__database__NAME: gitea
GITEA__database__USER: gitea
GITEA__database__PASSWD: gitea
depends_on:
- db
db:
image: postgres:14
container_name: postgres
restart: always
environment:
POSTGRES_USER: gitea
POSTGRES_PASSWORD: gitea
POSTGRES_DB: gitea
volumes:
- ./gitea/postgres:/var/lib/postgresql/data
上記ファイルが出来上がったら、コンテナで立ち上げて、DBとかアカウントを作る
docker compose up -d
終わったら、一旦閉じる
docker compose down
Actionsを有効化していきます
下記設定を追加して、再度コンテナを立ち上げる
+ [actions]
+ ENABLED = true
docker compose up -d
そしたら、http://localhost:3000を開いて
アカウント > サイト管理 に移動して、ランナーのタブへ移動
直接移動用
http://localhost:3000/admin/runners
新しいランナーを作成ボタンを押してRegistration Token
をコピーしておく
Runnerを立てる
ローカルで立ち上げても良いのですが、面倒だしすぐ消したいしなってことで、
こっちもコンテナで立ち上げます
act_runner
をローカルにクローン
git clone https://gitea.com/gitea/act_runner
今のフォルダ構成
.
├── act_runner
│ └── いっぱい
├── compose.yml
└── gitea
├── data
└── postgres
compose.yml
にrunnerを立てる
# さっきの設定はそのまま
+ runner:
+ build:
+ context: ./act_runner
+ dockerfile: Dockerfile
+ container_name: runner
+ restart: always
+ environment:
+ GITEA_INSTANCE_URL: http://gitea:3000
+ GITEA_RUNNER_REGISTRATION_TOKEN: <ここにさっきコピーしたトークンを貼り付ける>
+ GITEA_RUNNER_NAME: test-runner
+ GITEA_RUNNER_LABELS: ubuntu-latest,ubuntu-22.04,ubuntu-20.04,ubuntu-18.04
act_runner
のDockerファイルで、setup.shが動くようになっていたので、
setup.shを見たら、環境変数で登録しておけば問題なさそうでした。
ただし、登録の手順にはname, labelsは空白で問題ないと出ていたのですが、
labelsを空白にすると、runner側がdocker sockと通信できていなかったので、
初期値をそのまま追加しています
setup.sh
を書き換えてlabelsのオプションを無くせば動くようになるのだろうか...?
Runner name, you can just leave it blank;
Runner labels, you can just leave it blank.
https://gitea.com/gitea/act_runner/src/branch/main/README.md#register
ラベルはここ見て追加しました。(compose上でラベルを設定しなかったら全てこの値が入るようになっている)
https://blog.gitea.io/2023/03/hacking-on-gitea-actions/#what-are-the-labels-for-runners-used-for
コンテナを立ち上げて、Giteaのランナーページをリロードして表示されていればok
docker compose up -d
稼働させてみる
デモ用のgitリポジトリの作成
Gitea側でリポジトリを作ります
リポジトリ毎にActionsを有効かする必要があるので注意
demo/demo-runner
リポを作って、
設定 > リポジトリ に移動
下にスクロールしてActionsのチェックボックスを有効化します
設定を保存すると、イシューとパッケージの間にActionsタブが増えます。
次はローカル側の作成
mkdir demo-runner
cd demo-runner
git init
git branch -m main
ワークフローファイルを作る
mkdir -p .gitea/workflows/
touch .gitea/workflows/demo.yml
# .gitea/workflows/build.yaml
name: Gitea Actions Demo
run-name: ${{ github.actor }} is testing out Gitea Actions 🚀
on: [push]
jobs:
Explore-Gitea-Actions:
runs-on: ubuntu-latest
steps:
- run: echo "🎉 The job was automatically triggered by a ${{ github.event_name }} event."
- run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by Gitea!"
- run: echo "🔎 The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}."
- name: Check out repository code
uses: actions/checkout@v3
- run: echo "💡 The ${{ github.repository }} repository has been cloned to the runner."
- run: echo "🖥️ The workflow is now ready to test your code on the runner."
- name: List files in the repository
run: |
ls ${{ github.workspace }}
- run: echo "🍏 This job's status is ${{ job.status }}."
コードは下記の4から持ってきています
pushします
Actionsは失敗します
リポジトリの設定は自分のものにしてください
私は面倒だったので、http経由で...
git remote add origin http://localhost:3000/demo/demo-runner.git
git add .
git commit -m "create workflows"
git push -u origin main
Actionsのクローズを開くと失敗しています。。。。
ログを見ると、nodeがないぞと言われてます。
それもそのはず、使ったDockerfileはalpineベースだったので、、、
解決方法(力技)
今回は面倒なので、runnerに直接インストールしちゃいます
docker compose exec -it runner /bin/ash
runner上で、nodejsをインストール
apk add --no-cache nodejs
OKが出ればok
再実行のボタンがあるのでそちらをクリック
画面が再度読み込まれて成功します
まとめ
案外簡単に実行させてくれました。
act_runnerのDockerファイルを直接使ったので、一部エラーは出ましたが解決できるレベルだったのでよかった。
当然ながらDockerfileも綺麗に作ってくれているので、自分が作成する環境で動くように修正すればすぐにでも使えるレベルかなと思います。(今回はcheckoutで失敗してしまったので)
ちなみにまだ問題点は残っておりまして、
- 利用したい環境でのDockerファイルの構築(Dockerで利用するなら)
- 多分必要なもの
- Docker in Dockerの環境
- checkoutするためにnode環境
- gitを使うためのgit環境
- +α 利用したい言語の環境
- 多分必要なもの
- runnerの再起動時にトークンは使用済みのメッセージが表示される
- ↑のメッセージ的にトークンの有効期限は一回限りっぽいので、どこのデータを持って起きておけば動くのかを考える必要がありそう
パッと思いついただけですが、後者は特に調べないと行けなさそうなので、
まだまだcomposeで利用するにはまだまだ遠いかも?(再起動を考えなければ問題ないですが)
memo
/data/.runner
に設定ファイルと思われるjsonファイルがあった