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

aqua で始める CI-Friendly なツール管理

YuyaKoda
November 28, 2023

aqua で始める CI-Friendly なツール管理

Engineering Productivity Meetup #1 in Tokyo
https://cybozu.connpass.com/event/298452/

YuyaKoda

November 28, 2023
Tweet

More Decks by YuyaKoda

Other Decks in Business

Transcript

  1. © DeNA Co., Ltd. 1
    aqua で始める CI-Friendly な
    ツール管理
    幸田優哉
    品質本部品質管理部 SWET 第二グループ
    株式会社ディー・エヌ・エー

    View full-size slide

  2. © DeNA Co., Ltd. 2
    Yuya Koda
    今年の9月に DeNA に Join しました。前職は toC の
    会社でインフラ周りを中心に見ていました。
    現在は主に社内向けに提供している GitHub Actions
    self-hosted runner の運用改善などを行っています。
    DeNA 品質本部品質管理部 SWET 第二グループ
    ponkio-o
    ponkio_o
    yuya-koda
    y.koda0301
    © DeNA Co., Ltd.
    自己紹介

    View full-size slide

  3. © DeNA Co., Ltd. 3
    aquaproj/aqua

    View full-size slide

  4. © DeNA Co., Ltd. 4
    1 aquaproj/aqua とは
    ● Golang 製のマルチプラットフォーム (Windows/Linux/Mac) で動く CLI ツール
    ● ツールのジャンルとしては「CLI バージョンマネージャー」に分類される
    ○ 類似ツールだと asdf が有名
    ○ 言語に特化したものだと nvm や pyenv などが有名
    ● 現在 (2023/11/14) サポートされているツールは 1300 以上
    ○ シングルバイナリで動くツールはだいたいサポートされている(はず)
    ● aqua は様々な機能が存在するが、特に CI で便利に使える機能がたくさんある

    View full-size slide

  5. © DeNA Co., Ltd. 5
    簡単な使い方

    View full-size slide

  6. © DeNA Co., Ltd. 6
    2 簡単な使い方の紹介 (ツールのインストールから実行まで)
    例:terraform コマンド (hashicorp/terraform) をインストールする手順
    1. aqua init で aqua.yaml を生成する
    2. aqua g -i で “terraform” を検索して選択 (-i は aqua.yaml への自動追加のオプション)
    3. aqua i -l でインストール (-l は Lazy Install のオプション)
    4. “terraform” を実行する
    ※ aqua 本体のインストールや PATH の設定は済んでいる前提

    View full-size slide

  7. © DeNA Co., Ltd. 7
    簡単なデモ

    View full-size slide

  8. © DeNA Co., Ltd. 8
    aqua の CI-Friendly な機能

    View full-size slide

  9. © DeNA Co., Ltd. 9
    3 CI-Friendly な aqua の機能
    CI で動かすツール管理をするうえで便利な機能がたくさんある
    ● Single Binary & Cross Platform 対応
    ● Orb (CircleCI) / Actions (GitHub Actions) の提供
    ● 厳密なバージョン管理
    ● Renovate による継続的なバージョンアップデート
    ● aqua i -l による Lazy Install
    ● Checksum Verification / Policy as Code など Supply Chain Attack への対策
    など

    View full-size slide

  10. © DeNA Co., Ltd. 10
    3 Single Binary & Cross Platform
    ● aqua 本体は Golang 製で Windows/Linux/Mac をサポート
    ○ アーキテクチャは x86_64 と arm64 に対応
    ● シングルバイナリなので他の依存はない
    ○ 利用する場合には aqua のバイナリを落として PATH を通すだけ
    ● 最近では CI 環境の実行環境の種類 (OS/Arch) も増えてきているので便利

    View full-size slide

  11. © DeNA Co., Ltd. 11
    3 Orb (CircleCI) & Actions (GitHub) の提供
    ● Orb (CircleCI) と Actions (GitHub Actions) が提供されている
    ○ aqua 本体と aqua で管理しているツールのインストールが行われる
    ○ Layz Install (後述) でインストールされる
    CircleCI の例
    GitHub Actions の例

    View full-size slide

  12. © DeNA Co., Ltd. 12
    3 厳密なバージョン管理
    ● aqua では latest や stable のような mutable なバージョン指定ができない
    ○ これは不便なようにも見えますが特に CI では厳密にバージョンを管理するべき
    (だと個人的にも思っています)
    ○ 個人的に気に入っている機能 (というか仕様)
    公式ドキュメントの latest について書かれている箇所

    View full-size slide

  13. © DeNA Co., Ltd. 13
    3 Renovate による継続的なバージョンアップデート
    ● aqua-renovate-config で Renovate の Shareable Config Presets が提供されている
    ● aqua 本体と aqua.yaml で管理しているツールのバージョンアップが行える
    ○ extends で読み込む形なので schedule や automerge のルールは各プロジェクトに
    合わせて任意のものを設定可能
    renovate.json の例

    View full-size slide

  14. © DeNA Co., Ltd. 14
    3 aqua i -l による Lazy Install のサポート
    ● Lazy Install は、各種ツール (e.g. terraform) のインストール (バイナリのダウンロード)
    を「ツールの実行時」に実行するための機能
    ○ 各ツールの PATH は通されるが、バイナリはダウンロードされない
    ○ そのツール (e.g. terraform) を実行したタイミングで初めてバイナリのダウンロード
    が始まる
    ● CI では Job 毎に必要なツールが異なるケースがあるが、インストールする/しないを意
    識する必要がない
    ○ とりあえず aqua-installer を実行すれば OK
    ○ aqua i -l は秒(文字通り)で終わる

    View full-size slide

  15. © DeNA Co., Ltd. 15

    View full-size slide