r/devops🔥 28
💬 40

エンジニア必見!今どきのCI/CDパイプライン構築、みんなは何使ってる?

Basic_Let7303
1日前

ディスカッション (42件)

0
Basic_Let7303OP
👍281日前

皆さんこんにちは!皆さんが普段どのようなツールでCI/CDパイプラインを構築しているのか、ぜひ教えてください。また、今どきのベストプラクティスについても気になっています。現在自社開発のプロダクト企業で働いているのですが、社内独自のツールを使っていて標準的な構成から取り残されている感覚があります。皆さんの環境で「Jenkins + Argo + K8S」の組み合わせを使っている方はいますか?ぜひ知見を共有してもらえると嬉しいです!

1
Former-Wolverine9642
1日前

どうやってそのプロダクト系企業に入ったの?答えてくれたら君の質問にも答えるよ

4
Basic_Let7303
1日前

数年前に参加したよ。TerraformとVM上で動くスタンドアロンのDockerを扱ってきた。もちろん面接はクリアしてるよ。

5
AccurateLanguage1741
👍201日前

やあBasic_Let7303、もちろんだよ!うちはスタートアップで、こんな構成にしてる。

プロデューサーリポジトリ -> GitHubの再利用可能ワークフロー
コンシューマーリポジトリ -> アプリ、インフラリポジトリ

CI/CDのベースはこれ。
PRイベント
mainへのプッシュ

各リポジトリで再利用可能ワークフローを呼び出すメインのオーケストレーターが1つあるよ。

  • PRイベントは品質、セキュリティ、コミットメッセージの作法、古いブランチの整理がメイン
  • mainへのプッシュはバージョニング、ビルド、アップロード、GitOpsの更新、統合・ユニット・E2Eテストの実行がメイン

スタックはCI/CDにGitHub、K8s、ArgoCDを使ってる。セキュリティ面ではSAST、SCA、イメージスキャンをやってるよ。

6
configloader
👍141日前

PRの段階でユニットテストは走らせるべきじゃない?

7
AccurateLanguage1741
約21時間前

ホントそれ!🙌

8
Gunnertwin
👍51日前

PRで何かしらのテストはやってないの?

9
AccurateLanguage1741
👍1約21時間前

ああ、うちはPRイベントでテストを実行してるよ!見落としてたわ❤️

10
No_Quit_5301
1日前

これまでの人生で聞いた中で一番ヤバい話だわ。信じられないくらい無駄。

11
kahmeal
👍1約20時間前

こういうツールなしでエンタープライズ規模の品質とセキュリティを管理するなんて、頑張ってねとしか。

12
engineered_academic
👍141日前

自分のプロジェクトの大半にはBuildkiteを使ってる。CIの要件は全部これで賄えてるし、KubernetesでもベアメタルでもECSでも、何にでもデプロイできる。前の職場で使い始めてからずっと愛用してるよ。

13
Gunnertwin
👍51日前

これを使えば間違いないっていう「聖杯」みたいなツールセットは存在しないよ。組織がどんなアプリを持っているか、どれくらい予算をかけられるか次第だね。例えば、K8SよりDockerベースのPaaSの方が合っている場合もあるし、Azureのエコシステムに入っているならJenkinsよりAzure DevOpsの方が良いかもしれない。

14
Jilson
👍11日前

Nx

15
OhHitherez
👍111日前

適材適所でツールを選ぶのが一番。うちではJenkins、GHA、Azure、K8sにVMを使い分けてるよ。ワークフローごとに何が最適かを検討する必要があるしね。基本的にはJenkinsよりGHAを優先して考えていて、近いうちにArgoCDも試す予定。大事なのはツールを無理やり当てはめることじゃなくて、目的に合った正しいツールを選ぶことだね。

16
Basic_Let7303
👍61日前

GitHub ActionsはGitHubと密結合しすぎなんだよね。それが強みでもあるけど、同時に制約にもなってる。

18
Soccham
👍6約23時間前

一番の制約は、GitHubがまともに稼働し続けてくれないことだね。

19
rabbit_in_a_bun
👍4約22時間前

というか、セキュリティも怪しい気がする…

20
ownroot
👍21日前

このCIパイプラインは、公式のアップストリームバイナリと自前でビルドした静的バイナリの両方に同じスモークテストを行うことで、nginxのリリースを検証してるよ。まず公式のnginx:alpineイメージをプルしてSBOMを生成し、メインのスキャナーとしてgrypeでCVEをチェック(trivy-actionの侵害対策として、trivyはバックアップとして並列実行)。次に公式バイナリでスモークテストを実行してHTTPの挙動を確認。そのあと、muslとPCRE2を使ってソースからnginxをコンパイルし、カスタムの静的バイナリを作成。そのカスタムビルドにも独自の宣言的SBOMとgrypeでのCVEスキャンを実施(trivyはここで汎用的なPURLを扱えないからね)。で、コンパイルしたバイナリに同じスモークテストを通して、公式と同じ挙動かを確認する。両方のビルドでSBOM、脆弱性レポート、スモークテストの結果が揃うから、アップストリームのリリースと自分たちが用意した成果物を直接比較できる。最終的にバイナリは署名されて、すべての成果物と一緒に公開されるよ。https://github.com/wererootops/nginx-cache-build/blob/main/.github/workflows/nginx-ci.yml

21
AccurateLanguage1741
👍1約21時間前

へぇ!Grypeって初めて聞いたかも!🫡

22
Raja-Karuppasamy
👍31日前

CIにはGitHub Actions、GKEへのCDにはArgoCDを使ってる。Actionsでビルド、テスト、レジストリへのプッシュをして、ArgoCDがリポジトリを監視してクラスターと同期する感じ。この構成ならパイプラインが直接クラスターにアクセスする必要がないし、プッシュ型じゃなくてArgoCDがプルする形になるからすごく快適。シークレット系はSealed Secretsを使えば、すべてGitで管理できるしね。Jenkinsも強力だけど、今どきホスト型のCIがこれだけ優秀だと、わざわざメンテナンスするコストを正当化するのは難しいよ。

23
Basic_Let7303
👍11日前

Argo CDってマネージドサービスとして使うべき?それともKubernetes内でセルフホストするべき?同じターゲットクラスターにHelmでArgo CDを入れると、管理対象のクラスターそのものに依存することになるのが気になってさ。もしクラスターが落ちたらArgo CDも使えなくなって、デプロイや復旧に支障が出るんじゃないかな。

24
Tushon
👍11日前

多くの場合、Argoを他の「管理系」サービスと一緒に別のクラスターへ隔離して、そのクラスターのアップデート管理を厳格にする運用が一般的だね。どこにホストしてもダウンするリスクはあるから、トレードオフを理解しておくことが重要かな(うちはビルドと一部のデプロイにGitHub Actionsを使ってるけど、あそこが落ちたら何もできないっていうリスクを承知で使ってるよ)。

25
rabbit_in_a_bun
👍41日前

投稿者さん、大事な質問をしてるけど詳細が全然書かれてないよ。君の場合はbashスクリプトで十分かもしれないけど、それすら判断できないし……。

27
rabbit_in_a_bun
👍71日前

何を作るのか、ソースコードはどこにあるのか、デプロイには何が必要か、出力は何でどこに置くのか、バックアップはどうなってるか、どんなテストが必要か、とか色々だよ。例えば、クラウドの小型組み込みデバイス用に特定のコンパイラでビルドするGitHubサブモジュールのCコードなのか、それともローカルのオンプレミスサーバーにあるPythonバックエンドを抱えたAzureのサービスなのかで話は全然違うでしょ?両方ともCI/CDツールは全く別物になるよね?

28
zqvxu
👍1約21時間前

それな。結局はスタックとコンテキストがめちゃくちゃ大事。Windows上のモノリシックな.NETアプリのCI/CDと、K8s上の小さなGoサービス群とか、データパイプライン、モバイルアプリのCI/CDじゃ全然別物になるし。「Jenkins + Argo + k8s」って構成でも、組み方次第で20通りのアーキテクチャができるからね。言語やフレームワーク、モノリスかマイクロサービスか、セルフホストかクラウドか、K8s導入済みかVMか、デプロイ頻度やチーム規模……これら次第で「ベストプラクティス」の意味すら変わっちゃう。そうじゃないと、みんな自分の好きなツールを並べるだけで、あんまり役に立たない回答になっちゃうよね。

29
tapo
👍11日前

うちはCI/CDにGitLabコンポーネントを使ってる。言語ごとにコンポーネントを一つずつ発行して、パイプラインの基本的な考え方を共有する「コア」を持たせてるよ。GitLabは自分たちでK8s上に運用してて、言語ごとに専用のビルドコンテナを用意してる。あと、Pythonツールをまとめたコンテナも一つあって、それを使ってJiraチケットの更新とか、リリースノートやGitLabリリースの作成、自動バージョニングなんかをやってる。GitLabにはK8s連携があるから、リリースが今のデプロイ状態にどう紐付いてるかも追跡できるよ。この方法で約20個のマイクロサービスを管理してて、3人のチームで毎週9つの環境へデプロイしてる。

30
sippin-jesus-juice
👍11日前

GitHub Actionsと基本的なyaml設定に頼るようにして、できるだけシンプルにしてるよ。スクリプトが必要なときは、モノレポの中にscriptsディレクトリを作ってそこにまとめてる。可読性を重視して、スクリプトは全部TypeScriptで書くのがマイルール。メインブランチからdevへの自動デプロイと、本番環境への手動ゲート付きデプロイ、あとはPRでのLintやユニットテスト、コード品質チェックをやってる。チームによっては、バージョン管理やJiraチケットのためにコミットメッセージのルールを強制することもあるかな。CI/CDエンジニアじゃないけど、全部自分で管理したい性格のフルスタックエンジニアって感じだね。

31
opinionsOnPears
👍21日前

今はCIでやってるタスクの多くをDaggerに移行しようとしてるよ。CIをなるべく環境依存させないようにして、もし乗り換えが必要になっても楽にできるようにしてる。DaggerならCIタスクをローカルで実行してテストできるのがいい。プロジェクトの回し者じゃないけど、その便利さには本当にびっくりしたよ。https://dagger.io/

32
94358io4897453867345
👍11日前

CIにはGitlab、CDにはGitを利用したプロモーション機能付きのGitlab、GitOpsにはArgoCDを使ってる。ターゲットは、ステートレスなアプリにはAKS、それ以外はVM / ACI / App Serviceって感じ。

33
name_noname
1日前

やあWaltuh。パイプラインに興味があるなんて知らなかったよ。

34
veritable_squandry
👍11日前

CIにJenkins、CDにFlux。

35
Any-Grass53
👍2約21時間前

だよね。今はGitHub ActionsとArgoCD、K8sを使ってるけど、昔のJenkinsてんこ盛りな環境より管理がずっと楽。一番大きかったのは、CIジョブの中に隠れたカスタムスクリプトを大量に書くやり方から、GitOpsスタイルのデプロイへ移行したことかな。

36
jdl6884
👍1約20時間前

CIテスト、バリデーション、アーティファクトのパブリッシュ、ビルドにはAzure DevOps。
CDと環境管理にはOctopus。
スキーマ管理とインフラにはAlembicとTerraformを使ってる。

37
planbskte11
👍1約19時間前

以前はJenkinsを使ってた。今はYml(GitLab系が多い)+Linuxランナーの組み合わせが一番お気に入り。オンプレのテストベッド(宇宙関連の機材)をよく扱うから、手動プロセスを認証してから翻訳するようなやり方をしてる。

38
jcigar
👍1約18時間前

FreeBSD上でセルフホストしたForgejoインスタンス、階層型jailとZFS委譲を使ったビルダー風のjail環境、あとはSalt-api経由でSaltstackオーケストレーションって感じ。

39
Expensive_Finger_973
👍1約18時間前

リポジトリや状況に合わせて、AWS、Terraform(OSS版とHCP版)、Ansible、Puppet、GitHub Actionsを適宜組み合わせて使ってるよ。

40
Alphasite
👍1約18時間前

ローカルファースト。これに尽きる。

41
randomNext
👍1約16時間前

仕事ではCircleCIとArgoCDを使ってるよ。個人プロジェクトなら、サーバー周りはシンプルにGitHub Actionsで、クライアントアプリのビルドとデプロイはCloudflareを使ってる。