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

GitLab-CIとGoogleCloudRunで作るSandBox環境

mina
October 18, 2020
150

 GitLab-CIとGoogleCloudRunで作るSandBox環境

mina

October 18, 2020
Tweet

Transcript

  1. GitLab-CIとGoogleCloudRunで
    作るSandbox環境
    KIT Developers Meetup #5

    View Slide

  2. View Slide

  3. ぼく
    silmin(mina)
    Twitter: @silmin_
    すき: NW,仮想化,基盤構築
    加藤恵,Vim,Linux
    金沢工業大学 工学部 情報工学科 3ねんせい
    NICT(国立研究開発法人情報通信研究機構)でRA

    View Slide

  4. 夏インターン

    View Slide

  5. 夏インターン

    View Slide

  6. GitLab-CIとGoogleCloudRun
    で作るSandbox環境

    View Slide

  7. GitLab-CIとGoogleCloudRun
    で作るSandbox環境

    View Slide

  8. Sandboxって何

    View Slide

  9. Sandboxって何

    View Slide

  10. Sandboxって何
    お手軽に作って壊せる実験環境

    View Slide

  11. GitLab-CIとGoogleCloudRun
    で作るSandbox環境

    View Slide

  12. GoogleCloudRunって何
    (公式より)
    コンテナ化されたアプリケーションをすばやく安全にデ
    プロイ、スケーリングできる、フルマネージド型のコン
    ピューティング プラットフォーム
    ● さまざまな言語(Go、Python、Java、Ruby、Node.js など)で自由にコードを作成で
    きます。
    ● インフラストラクチャの管理が一切不要になり、シンプルな開発者エクスペリエンス
    が実現します。
    ● オープン標準 Knative を基盤として構築されているため、アプリケーションの移植
    が可能になります。

    View Slide

  13. Cloud Run
    app 1
    . . .
    auto scaling
    app 2
    . . .
    auto scaling
    . . . . . .
    コンテナ化されてるアプリを雑にデプロイできる

    View Slide

  14. GitLab-CIとGoogleCloudRun
    で作るSandbox環境

    View Slide

  15. GitLab-CIって何
    GitLabが持ってるCI機能のこと
    GitLab=Gitのリモートリポジトリの実装の1つ(GitHub/BitBacket等と同じ)
    gitlab.comが公式だが,無料でローカルに建てることもできる
    CI/CD機能などDevOps周りの機能がめちゃくちゃ充実している

    View Slide

  16. CI/CDって何
    Continuous Integration (CI)
    Continuous Delivery (CD)
    Continuous Deployment (CD)
    みたいな意味を持ってる
    継続的にテストしたりデプロイしたりしたいね,みたいな感じ
    commit/push/mergeみたいなGit-Flowによくある動作に紐づいて発火して,
    任意の処理をさせられる仕組みのこと(本質的には発火点が特殊なただのcron)

    View Slide

  17. stages:
    - test
    - build
    - deploy
    test-app:
    stage: test
    script:
    - ./.ci-scripts/test.sh
    - echo “任意のスクリプトが呼べ
    る”
    only:
    - pushes
    build-app:
    stage: build
    script:
    - ./.ci-scripts/build.sh
    when: on_success
    deploy-app:
    stage: deploy
    script:
    - ./.ci-scripts/deploy.sh
    when: manual
    .gitlab-ci.yml

    View Slide

  18. GitLab-CIとGoogleCloudRun
    で作るSandbox環境

    View Slide

  19. 作ったもの

    View Slide

  20. 仕組み
    ディレクトリ作成 → App作成
    ディレクトリ削除 → App削除

    View Slide

  21. 仕組み(App作成)
    Appディレクトリ作成 → App作成
    ● Dockerfileを含むものをAppと認識
    ● Appに基づいてCloudRunを作成
    ● GitLab-CIでgcloudコマンドを実行

    View Slide

  22. ● ディレクトリ一覧を走査して App
    の一覧を取得
    ● そのAppをbuild
    ● CloudRunにdeploy
    開発者
    code push container registry
    (gcr)
    Cloud Run

    View Slide

  23. 仕組み(App削除)
    Appディレクトリ削除 → Appを削除
    ● CloudRunのリストと比較
    ● 専用のCloudRunAppで対応(cloudrun-remover)
    ● Appの一覧はCloudRunApp内部では使えない
    ○ 外部ストレージ(GCS)に上げておく
    ○ URLは環境変数に投げる

    View Slide

  24. Cloud Run
    GCS
    App一覧
    cloudrun-remover
    ...
    deploy
    CI時にupload

    View Slide

  25. Cloud Run
    GCS
    App一覧
    cloudrun-remover
    ...
    App一覧
    App内部で取得
    比較し,差分を
    CloudRunから削除

    View Slide

  26. cloudrun-removerとして作る意味
    Q. GitLab-CIで任意のスクリプトを実行可能なら,そこで全部できるんじゃ?
    A. 本当はGoogleCloudSchedulerからキックするようにしたかった

    View Slide

  27. Cloud Run
    GCS
    App一覧
    cloudrun-remover
    ...
    App一覧
    App内部で取得
    比較し,差分を
    CloudRunから削除
    Cloud Scheduler
    定期的に実行

    View Slide

  28. まとめ
    ● GitLab-CI思ったより強力だった
    ● CloudRun楽でいい
    ● GitLab自分の環境にも欲しくなった(建てた)
    ● cloudrun + gcr + gcs / 8day = $0.03 / $376.60
    ● やすいね!

    View Slide