Slide 1

Slide 1 text

Podman で実現する手軽な CI/CD 環境 Ueda Naoaki

Slide 2

Slide 2 text

自己紹介 - SocialDog, Inc - Podman歴2年 上田直諒 Ueda Naoaki / na0x2c6 https://twitter.com/na0x2c6 https://socialdog.jp/

Slide 3

Slide 3 text

自己紹介 - SocialDog, Inc - Podman歴2年 - OpenShift運用歴 - Kubernetes運用歴 上田直諒 Ueda Naoaki / na0x2c6 https://twitter.com/na0x2c6 https://socialdog.jp/

Slide 4

Slide 4 text

自己紹介 - SocialDog, Inc - Podman歴2年 - OpenShift運用歴0年 - Kubernetes運用歴0年 上田直諒 Ueda Naoaki / na0x2c6 https://twitter.com/na0x2c6 https://socialdog.jp/

Slide 5

Slide 5 text

自己紹介 - SocialDog, Inc - Podman歴2年 - OpenShift運用歴0年 - Kubernetes運用歴0年 - Podman愛だけで来ました 上田直諒 Ueda Naoaki / na0x2c6 https://twitter.com/na0x2c6 https://socialdog.jp/

Slide 6

Slide 6 text

PodmanでCI/CDを運用したゆえに助かった話をします

Slide 7

Slide 7 text

※Podman初めての方向けの内容を含みます

Slide 8

Slide 8 text

どういう話か - JenkinsコンテナをPodmanで運用していた - もともと静的ファイルのデプロイに使っていた - 途中で依存系のインストールやビルドをしたくなった

Slide 9

Slide 9 text

出発点:静的ファイルをデプロイするためだけの

Slide 10

Slide 10 text

- TypeScriptをビルドしたい 出発点:静的ファイルをデプロイするためだけの

Slide 11

Slide 11 text

- TypeScriptをビルドしたい 出発点:静的ファイルをデプロイするためだけの

Slide 12

Slide 12 text

出発点:静的ファイルをデプロイするためだけの - TypeScriptをビルドしたい - 必要な環境が増える度にイメージに含める?

Slide 13

Slide 13 text

出発点:静的ファイルをデプロイするためだけの - TypeScriptをビルドしたい - 必要な環境が増える度にイメージに含める? - 💡コンテナでビルドしよう

Slide 14

Slide 14 text

Podman in Container 参考:How to use Podman inside of a container | Enable Sysadmin

Slide 15

Slide 15 text

Podman in Container 参考:How to use Podman inside of a container | Enable Sysadmin

Slide 16

Slide 16 text

Podman in Container 参考:How to use Podman inside of a container | Enable Sysadmin

Slide 17

Slide 17 text

Podman in Container 参考:How to use Podman inside of a container | Enable Sysadmin Podman実行環境を用意

Slide 18

Slide 18 text

やりたかったこと 参考:How to use Podman inside of a container | Enable Sysadmin

Slide 19

Slide 19 text

やりたかったこと 参考:How to use Podman inside of a container | Enable Sysadmin npm ci npm run build

Slide 20

Slide 20 text

やりたかったこと 参考:How to use Podman inside of a container | Enable Sysadmin npm ci npm run build Jenkinsイメージにビルド環境を用意する必要がある

Slide 21

Slide 21 text

やりたかったこと 参考:How to use Podman inside of a container | Enable Sysadmin npm ci npm run build Jenkinsイメージにビルド環境を用意する必要がある Podman実行環境があれば…

Slide 22

Slide 22 text

やりたかったこと 参考:How to use Podman inside of a container | Enable Sysadmin npm ci npm run build Jenkinsイメージにビルド環境を用意する必要がある podman run --rm -v "$PWD:$PWD" -w "$PWD" -- docker.io/node:lts npm ci podman run --rm -v "$PWD:$PWD" -w "$PWD" -- docker.io/node:lts npm build Podman実行環境があれば… コンテナでビルドすればよい

Slide 23

Slide 23 text

Makefileの工夫 よく見る書き方

Slide 24

Slide 24 text

Makefileの工夫 custom.mk で上書き可能に

Slide 25

Slide 25 text

Makefileの工夫 custom.mk

Slide 26

Slide 26 text

Makefileの工夫 Jenkinsで使う custom.mk.deployでコミット

Slide 27

Slide 27 text

Makefileの工夫 Podmanでビルド🎉

Slide 28

Slide 28 text

だがしかし

Slide 29

Slide 29 text

だがしかし:責務を詰め込みすぎ?

Slide 30

Slide 30 text

だがしかし:責務を詰め込みすぎ? Jenkinsのためのコンテナ? Podmanのためのコンテナ? Container

Slide 31

Slide 31 text

だがしかし:責務を詰め込みすぎ? Jenkinsのためのコンテナ? Podmanのためのコンテナ? Container

Slide 32

Slide 32 text

Container Container JenkinsコンテナからPodmanエンジンコンテナを利用する 別コンテナにする

Slide 33

Slide 33 text

別コンテナにしたい:準備

Slide 34

Slide 34 text

別コンテナにしたい:準備 コンテナエンジンホストを指定 ※同一pod内で実行するためローカルホスト tcp://127.0.0.1:2375

Slide 35

Slide 35 text

dockerクライアントも利用可能 tcp://127.0.0.1:2375

Slide 36

Slide 36 text

Podmanはコンテナエンジンサービスとして待機可能 tcp://127.0.0.1:2375 で待機しているよ〜

Slide 37

Slide 37 text

Podmanはコンテナエンジンサービスとして待機可能 tcp://127.0.0.1:2375 で待機しているよ〜 OCI準拠のコンテナエンジンサービス OCI: Open Container Initiative コンテナフォーマットとランタイムに関するオープンな業界標準を作成するこ とを目的としたオープンなガバナンス機構 Open Container Initiative - Open Container Initiative

Slide 38

Slide 38 text

OCI準拠のコンテナエンジンサービス OCI: Open Container Initiative コンテナフォーマットとランタイムに関するオープンな業界標準を作成するこ とを目的としたオープンなガバナンス機構 Open Container Initiative - Open Container Initiative 別コンテナにしたい tcp://127.0.0.1:2375 で待機しているよ〜 Container Container

Slide 39

Slide 39 text

OCI準拠のコンテナエンジンサービス 別コンテナにしたい:Podmanエンジン in Podman tcp://127.0.0.1:2375 で待機しているよ〜 OCI: Open Container Initiative コンテナフォーマットとランタイムに関するオープンな業界標準を作成するこ とを目的としたオープンなガバナンス機構 Open Container Initiative - Open Container Initiative Container Container

Slide 40

Slide 40 text

OCI準拠のコンテナエンジンサービス 別コンテナにしたい:Podmanエンジン in Podman tcp://127.0.0.1:2375 で待機しているよ〜 OCI: Open Container Initiative コンテナフォーマットとランタイムに関するオープンな業界標準を作成するこ とを目的としたオープンなガバナンス機構 Open Container Initiative - Open Container Initiative Container Container

Slide 41

Slide 41 text

Kubernetes YAML定義のサンプル

Slide 42

Slide 42 text

Kubernetes YAML定義のサンプル /var/jenkins_home Podmanコンテナのビルド生成物を Jenkinsで利用可能に

Slide 43

Slide 43 text

PodmanはKubernetes YAMLを実行できる Pod

Slide 44

Slide 44 text

Quadlet: systemd を kubelet の代わりに 引用:podman-systemd.unit — Podman documentation

Slide 45

Slide 45 text

Quadlet: systemd を kubelet の代わりに 引用:podman-systemd.unit — Podman documentation Podmanをインストールすると systemd-generator に登録される

Slide 46

Slide 46 text

Quadlet: systemd を kubelet の代わりに 引用:podman-systemd.unit — Podman documentation 例:test.kube というファイルで ~/.config/containers/systemd/ に配置

Slide 47

Slide 47 text

Quadlet: systemd を kubelet の代わりに 引用:podman-systemd.unit — Podman documentation Quadletがsystemd unitに変換してくれる 例:test.kube というファイルで ~/.config/containers/systemd/ に配置

Slide 48

Slide 48 text

Quadlet: systemd を kubelet の代わりに 引用:podman-systemd.unit — Podman documentation Quadletがsystemd unitに変換してくれる 例:test.kube というファイルで ~/.config/containers/systemd/ に配置 Podmanなら k8s YAMLで手軽な環境構築も可能

Slide 49

Slide 49 text

Quadlet: systemd を kubelet の代わりに 引用:podman-systemd.unit — Podman documentation Quadletがsystemd unitに変換してくれる 例:test.kube というファイルで ~/.config/containers/systemd/ に配置 Podmanなら k8s YAMLで手軽な環境構築も可能 ※もちろんコンテナ単体のサービス化も可能 ホストネットワークを tailscaleネットワークに参加させる例。 コンテナイメージの自動更新も可能。

Slide 50

Slide 50 text

スライドの環境を再現するcompose.yaml Pod Container https://github.com/na0x2c6/connpass-231116-container-in-container

Slide 51

Slide 51 text

tcp://127.0.0.1:2375 そういえば:podman は docker compose も実行できる

Slide 52

Slide 52 text

PodmanにはDesktopアプリがある Podman Desktop - Containers and Kubernetes

Slide 53

Slide 53 text

Pod Container https://github.com/na0x2c6/connpass-231116-container-in-container スライドの環境を再現するcompose.yaml

Slide 54

Slide 54 text

Pod Container https://github.com/na0x2c6/connpass-231116-container-in-container Let’s try Podman!!! スライドの環境を再現するcompose.yaml