Skip to content

Latest commit

 

History

History
210 lines (141 loc) · 7.11 KB

source.markdown

File metadata and controls

210 lines (141 loc) · 7.11 KB

% Hydra % サニエ エリック % 2017年3月24日 - Tokyo NixOS Meetup

News

前回の復習

前書 - 注意

  • Hydraの正式リリースはない
  • ドキュメンテーションはほぼ存在しない
  • Jobsetはnix言語で書く必要がある
  • hydra.nixos.org で利用される前提で開発されています
  • 現時点で使うには多少努力がいる

Hydra

  • Nixのメインプロジェクトの一つ
  • Nixの自動化ツール+α
  • NixOS/nixpkgsの継続インテグレーションビルドファーム
  • Nix/NixOSでバイナリパッケージを利用できるのはHydraのおかげ

Hydra (Nix)

  • 環境の管理
  • 分散ビルド
  • マルチプラットフォーム
  • パッケージのバリエーション

継続インテグレーション

  • 自動的にソースを取得とビルド
  • 前評価と違いを比較
  • ビルドログ保存
  • 失敗の場合にメンテナへメール送信
  • カスタムビルドプロダクト

ビルドファーム

  • ビルドされたパッケージとクロージャー(パッケージと依存)をダウンロード可
  • カスタムビルドプロダクト
  • Nixチャンネル生成

特徴

Hydraの構造

  • Server: ビルド結果と情報を確認できるWebアプリケーション
  • queue-runner: インプットの変更をチェック、ビルドを管理する
  • evaluator: ジョブを評価する
  • Nix Daemon: パッケージと依存関係をビルド(Nix)

Hydraの仕組み

  • .nixで定義されたJobsetを評価します
  • jobsetはアトリビュートセット{ ... }でバリューはパッケージ
  • すべてのJobsetパッケージをビルド

Jobset

インストール

  • Nixが必要、NixOSで簡単にインストール

  • 基本設定(configuration.nix):

    services.hydra = {
      enable = true;
      hydraURL = "hydra.example.org";
      notificationSender = "[email protected]";
    };

NixOpsでインストール例

  • examples/single
  • examples/cluster

Webインターフェイス

Webインターフェイス - Project

  • enabled: プロジェクトを有効にする
  • identifier: 識別子
  • display name: Webインターフェイスに利用されるプロジェクト名
  • description: プロジェクト概要
  • homepage: プロジェクトのホームページ
  • owner: プロジェクトの所有者

Webインターフェイス - Jobset

  • state: Jobsetのステート
  • inputs: Jobsetの変数
    • 一つは評価するNix expressionのソース
    • 残りはNix expressionの引数
  • Nix expression: ビルドするNix expression (jobsetファイル)
    • FILE.nix in INPUT
  • shares: 利用できるCPUパワーの割合
  • 宣言的jobsetも利用できます

Jobsetソース: 三つのアプローチ

  • カスタムnixpkgsベース
  • 単独ソフトウェア
  • カスタムパッケージセット

nixpkgsベース

  • 変更したnixpkgsに独自release.nixを作成
  • Hydraでビルド

単独ソフトウェア

  • nixで管理するように
    • shell.nix: 開発環境用のnixファイル
    • build.nix: プロジェクトをビルドできるnixファイル
    • release.nix: Hydraのjobsetファイル
  • サンプル: binserver

カスタムパッケージセット

  • nixpkgsの構造を真似て作る
    • パッケージセットを定義し、外部ソースを取得
  • サンプル

リンク集