PiyoConf2021でのLT登壇資料です 自宅でGitLabをホストすることによるうれしさを話します
PiyoConf2021 https://otaku-project.connpass.com/event/225453/
おうちGitLabのススメmina @ PiyoConf 2021
View Slide
mina (silmin)Twitter:@silmin_すき: コンピュータ/サーバインフラプログラミング/アニメ/加藤恵ワ...! ことしで学生終わり...ってコト?
きょうのおはなしおうちや研究室にGitLabをホストして遊ぼう!
GitLabGitのリモートリポジトリマネージャの一つgitlab.com が公式だが,自前でホストすることもできるCIやkanban,DevOps周りの機能が豊富「オールインワンなDevOpsプラットフォーム」らしい草が青いよかわいいねたぬきモチーフかわいいね(キツネっていってごめんね...)
らしい企業内で採用しているのを結構見る気がする
こんな経験ありませんか?適当に構築したサーバ類にそれぞれSSHしてテスト・変更適用
こんな経験ありませんか?インターネットXX as Code + CI/CDで自動化したけどGitHubやインターネットが爆散
グローバル上のサービスからローカルへはアクセス難自分しか使わないCIはグローバルに置く嬉しさが少ないgloballocalこんな経験ありませんか?
globallocal落ちても自分で起こせばいいね!ローカルに構築すれば解決
建前おわり
楽しいから!!!!!!!!!!
おうちでGitLab - インストール公式からはOSS版とEnterprise版がある(gitlab-ce / gitlab-ee)Enterprise版→OSS版と機能が降ってくるEnterprise版でも無料プランがあるので,タダでやる場合差はないかもインストール方式(公式)パッケージ版/ k8s(helm/operator) / Dockerイメージ / ソースから など有志でdocker-composeとかもあるけど,公式にある方法がおすすめ
おうちでGitLab - CIについてリポジトリ直下に.gitlab-ci.yamlを書いて定義できる
stages:- test- build- deploytest-app:stage: testscript:- ./.ci-scripts/test.sh- echo “任意のスクリプトが呼べる”only:- pushesbuild-app:stage: buildscript:- ./.ci-scripts/build.shwhen: on_successdeploy-app:stage: deployscript:- ./.ci-scripts/deploy.shwhen: manual.gitlab-ci.yaml
おうちでGitLab - CIについてリポジトリ直下に.gitlab-ci.yamlを書いて定義できるJobを実行するのはGitLab Runner
GitLab RunnerGitLab CIにおいて,Job実行を担当するやつ実際はRunnerからExecutorを生やして実行するExecutorにはDockerコンテナやVirtualBox(VM)など,いろんなのがある指定されたイメージでExecutorを生やすExecutorExecutor←Jobを実行←Jobを実行
おうちでGitLab - CIについてリポジトリ直下に.gitlab-ci.yamlを書いて定義できるJobを実行するのはGitLab RunnerGitLab CIは登録されたRunnerに処理を委譲するCDに関してもCI上でデプロイ処理をするだけなので,本質的には同じものデプロイ処理はAnsibleとか,k8sならArgoCDとか諸々...対オンプレなら単にrsyncでもヨシ
Push JobDeployExecutorContainerRegistryPull(Push)ローカルに建てておくと便利
うれしさ落ちても自己責任で復旧できるCI周りを整備するに合わせてローカルにいろんなサービスを建てるそのサービスの管理もGitLabでやる:GitLabを中心にどんどんローカル環境が要塞化していく(うれしいね)ローカルなのでセキュリティを特に意識しないで遊べるのもいいところかもGitHubにおきたかったらMirrorしたらよし
CI盆栽(調律)は無限に遊べるコンテンツ便利なBotをつくるもよし便利なJobをつくるもよし便利なExecutor Imageを作るもよしデプロイ先を拡張するもよしCI時に頼るサービスをつくるもよし探求は無限じゃよ
Tips:DinDDockerコンテナの中でDockerを使うこと(docker build とかやりたくなる)docker:dindイメージを使うか,ホストのdocker daemonを共有するのをよくみる前者は --privileged オプションが必須(やりたくねえ)後者はホストのdockerを触ってるのと同じなので,親のDockerコンテナを殺せるどちらにせよあんまりよくない
Tips:DinDDockerコンテナの中でDockerを使うこと(docker build とかやりたくなる)docker:dindイメージを使うか,ホストのdocker daemonを共有するのをよくみる前者は --privileged オプションが必須(やりたくねえ)後者はホストのdockerを触ってるのと同じなので,親のDockerコンテナを殺せるどちらにせよあんまりよくない僕はKanikoを使ってますKaniko内でDockerfileを読んで,Docker Imageとして固めるらしい しらんけど
おわり