LoginSignup
3
2

More than 1 year has passed since last update.

Gitea Actionsをdocker環境で試してみた

Last updated at Posted at 2023-04-26

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のセットアップから

デフォルトでは無効化されているので、アクティベートをしていきます

compose.yml
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とかアカウントを作る

shell
docker compose up -d

終わったら、一旦閉じる

shell
docker compose down

Actionsを有効化していきます
下記設定を追加して、再度コンテナを立ち上げる

~/gotea/data/gitea/conf/app.ini
+ [actions]
+ ENABLED = true
shell
docker compose up -d

そしたら、http://localhost:3000を開いて
アカウント > サイト管理 に移動して、ランナーのタブへ移動

直接移動用
http://localhost:3000/admin/runners

スクリーンショット 2023-04-27 0.38.16.png

新しいランナーを作成ボタンを押してRegistration Tokenをコピーしておく

Registration Tokenのコピー画面

Runnerを立てる

ローカルで立ち上げても良いのですが、面倒だしすぐ消したいしなってことで、
こっちもコンテナで立ち上げます

act_runnerをローカルにクローン

git clone https://gitea.com/gitea/act_runner

今のフォルダ構成

.
├── act_runner
│   └── いっぱい
├── compose.yml
└── gitea
    ├── data
    └── postgres

compose.ymlにrunnerを立てる

compose.yml
# さっきの設定はそのまま
+   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

スクリーンショット 2023-04-27 0.59.58.png

稼働させてみる

デモ用のgitリポジトリの作成

Gitea側でリポジトリを作ります
リポジトリ毎にActionsを有効かする必要があるので注意

demo/demo-runnerリポを作って、
設定 > リポジトリ に移動

スクリーンショット 2023-04-27 1.07.44.png

下にスクロールしてActionsのチェックボックスを有効化します

スクリーンショット 2023-04-27 1.08.41.png

設定を保存すると、イシューとパッケージの間にActionsタブが増えます。
スクリーンショット 2023-04-27 1.10.14.png

次はローカル側の作成

mkdir demo-runner
cd demo-runner
git init
git branch -m main

ワークフローファイルを作る

mkdir -p .gitea/workflows/
touch .gitea/workflows/demo.yml
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のクローズを開くと失敗しています。。。。

スクリーンショット 2023-04-27 1.13.34.png

ログを見ると、nodeがないぞと言われてます。
それもそのはず、使ったDockerfileはalpineベースだったので、、、

スクリーンショット 2023-04-27 1.14.15.png

解決方法(力技)

今回は面倒なので、runnerに直接インストールしちゃいます

docker compose exec -it runner /bin/ash

runner上で、nodejsをインストール

apk add --no-cache nodejs

OKが出ればok

再実行のボタンがあるのでそちらをクリック

スクリーンショット 2023-04-27 1.17.51.png

画面が再度読み込まれて成功します

スクリーンショット 2023-04-27 1.18.18.png

まとめ

案外簡単に実行させてくれました。
act_runnerのDockerファイルを直接使ったので、一部エラーは出ましたが解決できるレベルだったのでよかった。
当然ながらDockerfileも綺麗に作ってくれているので、自分が作成する環境で動くように修正すればすぐにでも使えるレベルかなと思います。(今回はcheckoutで失敗してしまったので)

ちなみにまだ問題点は残っておりまして、

  • 利用したい環境でのDockerファイルの構築(Dockerで利用するなら)
    • 多分必要なもの
      • Docker in Dockerの環境
      • checkoutするためにnode環境
      • gitを使うためのgit環境
      • +α 利用したい言語の環境
  • runnerの再起動時にトークンは使用済みのメッセージが表示される
    • ↑のメッセージ的にトークンの有効期限は一回限りっぽいので、どこのデータを持って起きておけば動くのかを考える必要がありそう

パッと思いついただけですが、後者は特に調べないと行けなさそうなので、
まだまだcomposeで利用するにはまだまだ遠いかも?(再起動を考えなければ問題ないですが)

memo

/data/.runnerに設定ファイルと思われるjsonファイルがあった

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2