Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Real World Nix CI/CD編

asa1984
March 09, 2025

Real World Nix CI/CD編

Nix meetup #2 の飛び入り LT に登壇した際のスライド

asa1984

March 09, 2025
Tweet

More Decks by asa1984

Other Decks in Technology

Transcript

  1. asa1984 - 名前の読み方: アサヒ - Asahi (本名) + ジョージ・オーウェル『1984』 -

    自称 Web フロントエンドエンジニア 所属 - 仙台高専ロボティクスコース (2020 ~ 2025-03) - ??? 2
  2. asa1984 - 名前の読み方: アサヒ - Asahi (本名) + ジョージ・オーウェル『1984』 -

    自称 Web フロントエンドエンジニア 所属 - 仙台高専ロボティクスコース (2020 ~ 2025-03) - HERP (2025-04~) - スタートアップの HR Tech - Nix をプロダクションで利用している超おもしろ企業 3
  3. 報告 就職しました 1. Nix meetup #1 に参加 (2024-10) 2. 懇親会で

    HERP の方にインターンを紹介される 3. インターン参加 (2024-12) 4. 入社 (2025-04 予定) 4
  4. 報告 就職しました 1. Nix meetup #1 に参加 (2024-10) 2. 懇親会で

    HERP の方にインターンを紹介される 3. インターン参加 (2024-12) 4. 入社 (2025-04 予定) Nix meetup 運営の皆様、ありがとうございます!!! 5
  5. - 全部 Nix - home-manager - NixOS (Desktop) 9 -

    devShell - CI/CD - NixOS (Infra) DARK SIDE LIGHT SIDE プロダクション に投入可能 ギーク向け
  6. CI/CD に Nix を用いるメリット - 開発環境と CI 環境のツールの統一 - devShell

    を使えば簡単に同じツールを導入できる - デプロイ時間の短縮 - バイナリキャッシュを利用できる - IaaC としての性質 - 再現性・宣言的 10
  7. 1. devShell を用意する - まずは開発環境をセットアッ プしよう - flake.nix で devShell

    を定義 - nix develop で起動 - nix-direnv を使うともっと 体験が良い 12
  8. 2. CI 用パッケージを用意する - CI で使うパッケージを定義 - pkgs.buildEnv - 複数のパッケージをまとめ

    て1つのパッケージにするこ とができる Q. devShell 使わないの? A. Workflow でシェルを起動 してはいけない (1敗) 14
  9. 3. CI 環境に Nix を導入する GitHub Actions の場合 - DeterminateSystems/nix-installer-action

    - cachix/install-nix-action - etc… 上2つのどちらかを使えば OK 15
  10. 4. パッケージをインストールする - nix profile install .#ci - nix profile

    の使い所 - packages.ci をグローバルインストールする あとは普通の CI と同様にコマンドを使えるので OK 16
  11. バイナリキャッシュ on CI Nixpkgs はバイナリキャッシュがあるが… - 当然ダウンロードに時間はかかる - 自前ビルドしている場合は尚更 CI

    環境限定のバイナリキャッシュを作る - ローカルバイナリキャッシュストア - GitHub Actions Cache API - nix copy 参照: asa1984/infra/.github/actions/binary-cache/action.yaml 19
  12. バイナリキャッシュ on デプロイ - デプロイ対象が Nix でビル ドされているならバイナリ キャッシュを利用できる -

    Nix が想定している利用方法 (Nix meetup #1「Nix入門: パラダイム編」参照) 20 Supabase の例
  13. Docker with Nix pkgs.dockerTools.buildImage - Docker image をビルドする関数 - 必要なものだけが入ったミニマルイメージができる

    - distroless より小さくできる - 同様に self-hosted runner もビルド可能 - pkgs.github-runner 21