コンテンツにスキップ

[3/5] GiteaでCI/CDパイプラインを構築する テスト編

はじめに

この記事はGiteaを使ったCI/CDパイプラインの構築方法を展開する連載の一つである。

連載の各記事へは以下からジャンプできる。

  1. Giteaインストール編
  2. アプリケーション構築編
  3. テスト編
  4. ビルド編
  5. デプロイ編

CI/CDパイプラインでテストを実行する

この記事では以下の赤枠部である、テストコードの自動実行をやってみよう。

Act Runner登録用のトークンを作成する

GiteaではGitea Actionsという機能でCI/CDパイプラインを構築できるのだが、Giteaは直接Gitea Actionsを実行しない。Gitea Actionsの具体的な処理は上の図にある通り、Act Runnerが行う。

そのため、Gitea Actionsを使うためにまずAct Runnerを用意する必要がある。Act Runnerを用意するためにGiteaでトークンを発行する。

以下のようにGiteaの画面右上にあるSettingsを選択する。

以下のように左のメニューにあるActions-Runnersを選択し、画面右上のCreate new Runnerを押下する。

表示されるRegistration Tokenをコピーする。

Docker ComposeでAct Runnerを構築する

以下のコマンドを実行し、Docker Composeを一旦終了する。

1
$ docker compose down

以下のようにdocker-compose.ymlを編集し、Act Runnerを追加する。

GITEA_RUNNER_REGISTRATION_TOKENには先ほどコピーした値を設定する。

```yml title="docker-compose.yml" hl_lines="24-43,47-53" services: gitea: image: docker.gitea.com/gitea:latest restart: always volumes: - ./gitea/data:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - "3000:3000" healthcheck: # 今後GiteaのAct Runnerを使うときのためにヘルスチェックを用意しておく test: ["CMD", "curl", "-f", "http://localhost:3000"] interval: 10s retries: 3 start_period: 30s timeout: 10s environment: # localhostにするとAct RunnerのコンテナがGiteaのPackagesにPushできない # Act Runnerの接続先用URLとしてGiteaのserviceを指定することで外から名前解決できるようにする - GITEA__server__LOCAL_ROOT_URL=http://gitea:3000/ networks: - gitea-network act-runner: image: gitea/runner:latest restart: always depends_on: # Giteaが起動するまで待つ gitea: condition: service_healthy restart: true volumes: - ./act_runner/data:/data - /var/run/docker.sock:/var/run/docker.sock # Act Runnerの立ち上げるコンテナをホストのDockerデーモンに紐づける configs: - source: runner_config target: /config.yaml environment: - CONFIG_FILE=/config.yaml - GITEA_INSTANCE_URL=http://gitea:3000 - GITEA_RUNNER_REGISTRATION_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx networks: - gitea-network # Act RunnerがGiteaのリポジトリにアクセスできるようにGiteaと同一ネットワークにする networks: gitea-network: name: gitea-network configs: # Act Runnerがジョブ実行用に起動するコンテナが # GiteaのリポジトリにアクセスできるようにGiteaと同一のネットワークに設定する runner_config: content: | container: network: "gitea-network"

1
2
3
4
以下のコマンドを実行し、Docker Composeを起動する。

```bash
$ docker compose up -d

最後に表示された画面へ戻ったとき、以下のようにRunnerが登録されており、StatusがIdleになっていることを確認する。

リポジトリにCI/CDパイプラインの定義を追加する

GiteaではCI/CDパイプラインをWorkflowという概念で定義する。

プロジェクトに.gitea/workflows/workflow.ymlを追加する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
.
├── .gitea
│   └── workflows
│       └── workflow.yml
├── .gitignore
├── README.md
├── package-lock.json
├── package.json
├── src
│   ├── app.test.ts
│   ├── app.ts
│   ├── index.ts
│   ├── sum.test.ts
│   └── sum.ts
├── tsconfig.json
└── vitest.config.ts

リポジトリのmainブランチにプッシュしたとき、Act Runnerにnpm run typechecknpm run testを実行させるようにしてみる。

.gitea/workflows/workflow.yml
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
name: Workflow
on:
  push:
    branches:
      - main # mainブランチに対して実行する
env:
  NODE_VERSION: "24.14.1" # 使用するNode.jsのバージョンを定義する
jobs:
  typecheck:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v5
      - name: Use Node.js
        uses: actions/setup-node@v4
        with:
          node-version: ${{ env.NODE_VERSION }}
      - name: Install dependencies
        run: npm ci
      - name: Run typecheck
        run: npm run typecheck
  test:
    needs: typecheck # typecheckが通ったら実行する
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v5
      - name: Use Node.js
        uses: actions/setup-node@v4
        with:
          node-version: ${{ env.NODE_VERSION }}
      - name: Install dependencies
        run: npm ci
      - name: Run test
        run: npm run test

typecheckのジョブでは以下のことを行っている。

  • リポジトリをチェックアウトする
  • Node.js環境を用意する
  • リポジトリの依存関係をインストールする
  • npm run typecheckを実行する

testのジョブでは以下のことを行っている。

  • リポジトリをチェックアウトする
  • Node.js環境を用意する
  • リポジトリの依存関係をインストールする
  • npm run testを実行する

終わったらコミットしプッシュする。

1
2
3
$ git add .gitea/workflows/workflow.yml
$ git commit -m "typecheckとtestのジョブを定義した"
$ git push

CI/CDパイプラインの動作を確認する

Giteaの画面に戻る。以下のようにGiteaのリポジトリのページの上にActionsというタブがあるので、これを選択する。

以下のようにコミットに対応してCI/CDパイプラインが動作していることがわかる。コミットメッセージのリンクを選択する。

以下のようにCI/CDパイプラインのコンソールログが表示される。うまくいけば全部が✅️で埋まる。

逆に失敗したときは❌️となるので、コンソールログを確認し、修正を行う必要がある。

振り返り

  • Docker Composeを使ってAct Runnerを構築することができた
  • Gitea ActionsでCI/CDパイプラインを動かすことができた

次回

次回はCI/CDパイプライン上でビルドを行う。

[4/5] GiteaでCI/CDパイプラインを構築する ビルド編