Jenkinsと、Gitディストリビューションに同梱されているGitLab CI drone.ioのような他のCIとの違いは何ですか。いくつかの研究で私はGitLabコミュニティ版はJenkinsが追加されることを許さないがGitLabエンタープライズ版はそうすることができるということを思いつくことしかできなかった。他に大きな違いはありますか?
これが私の経験です。
私の仕事ではGitLab EEを使ってリポジトリを管理し、Jenkinsサーバー(1.6)を稼働させています。
基本的には、それらはほとんど同じです。それらはサーバー/ Dockerイメージ上でいくつかのスクリプトを実行します。
TL; DR;
ほとんどのCIサーバーはかなり単純です( concourse.ci )、 gitlab-ci 、 circle-ci 、 travis-ci 、 drone.io 、 gocd 、その他何がありますか?)それらはあなたがYAMLファイル定義からShell/batスクリプトを実行することを可能にします。 Jenkinsはもっとプラグイン可能で、UIが付属しています。これは、ニーズに応じて、利点と欠点のどちらかになります。
Jenkinsは利用可能なすべてのプラグインのために非常に設定可能です。この欠点は、CIサーバーがプラグインのスパゲッティになる可能性があることです。
私の意見では、Jenkinsでのジョブの連鎖と編成は、(UIのために)YAML(curlコマンドの呼び出し)よりもずっと簡単です。それに加えて、Jenkinsは特定のバイナリがあなたのサーバーで利用できないときにインストールするプラグインをサポートしています(他の人にとってはそれについては知りません)。
最近では( Jenkins 2 はJenkinsfile
および pipline Jenkins 2からデフォルトで提供される==プラグインを使用して、より適切なciをサポートしています)。すなわちGitLab CIより。
YAMLファイルを使用してビルドパイプラインを定義すること(そして最終的には純粋なShell/batを実行すること)はよりクリーンです。
Jenkinsのプラグインを使用すると、テスト結果、カバレッジ、その他の静的アナライザなど、あらゆる種類のレポートを視覚化できます。もちろん、あなたはいつでもあなたのためにこれをするためのツールを書くか使用することができます、しかしそれは間違いなくジェンキンスにとってプラスです(特にこれらのレポートを評価しすぎる傾向があるマネージャにとって)。
最近私はGitLab CIでますます仕事をしています。 GitLabで彼らは全体の経験を楽しくする本当に素晴らしい仕事をしています。私は人々がJenkinsを使っていることを理解しています、しかしあなたがGitLabを走らせて利用可能にしたときGitLab CIを始めるのは本当に簡単です。たとえ彼らがサードパーティの統合にかなりの努力を払っても、GitLab CIのようにシームレスに統合するものは何もありません。
執筆時点でいくつかの特典:
私はRikのノートの大部分に同意するが、どちらがより単純であるかについての私の意見は反対である。
大部分の力は、自己完結型であり、 同じブラウザ内の同じ製品にすべての を統合していることに由来します。タブ:リポジトリブラウザから、掲示板を発行するか、履歴を構築ツールに展開し、 モニタリング 。
私は今、さまざまなLinuxディストリビューションにアプリケーションがどのようにインストールされるかを自動化してテストするためにそれを使っています。それは設定が非常に速い( Firefoxで複雑なJenkinsのジョブ設定を行い、応答しないスクリプトが表示されるのを待ちます(.gitlab-ci.yml
を編集するのは軽量です)。
ランナーバイナリ のおかげで、スレーブの設定やスケーリングに費やされる時間はかなり少なくなります。加えて、 GitLab.com ではあなたはかなりまともで無料の共有ランナーを手に入れることができます。
Jenkinsは、数週間後にGitLab CIのパワーユーザーになったあと、より手動になったと感じています。ブランチごとにジョブを複製し、SCPアップロードなどの簡単なことをするためのプラグインをインストールする。今日のように私がそれを見逃したところが直面した唯一のユースケースは、複数のリポジトリが関係している場合です。それはまだうまく理解されている必要があります。
ところで、私は現在GitLab CIに関するシリーズを執筆しています。リポジトリCIインフラストラクチャをそれで構成するのがそれほど難しくないことを示すためです。先週公開された最初の記事では、基本、長所と短所、および他のツールとの違いについて紹介します。GitLab CIとの高速で自然な継続的統合
まず第一に、今日の時点で、GitLab Community EditionはJenkinsと完全に相互運用可能です。質問なし。
以下では、JenkinsとGitLab CIの両方を組み合わせた成功した経験についていくつかのフィードバックを示します。また、両方を使用するのか、どちらか一方だけを使用するのか、またその理由についても説明します。
これがあなた自身のプロジェクトに関する質の高い情報を提供することを願っています。
GitLab CI
GitLab CIは当然GitLab SCMに統合されています。 gitlab-ci.yml
ファイルを使用してパイプラインを作成し、グラフィカルインターフェースを介してそれらを操作することができます。
コードとしてのこれらのパイプラインは明らかにコードベースに格納することができ、「コードとしてのすべて」の慣行(アクセス、バージョン管理、再現性、再利用性など)を強制します。
GitLab CIは優れたビジュアル管理ツールです。
ジェンキンス
Jenkinsは素晴らしいビルドツールです。その強みはその多くのプラグインにあります。特に、Jenkinsと他のCIまたはCDツールとの間のインターフェースプラグインを使用することができました。これは、2つのコンポーネント間のダイアログインターフェイスを(おそらくひどく)再開発するよりも常に良い方法です。
コードとしてのパイプラインもgroovy
scriptsを使って利用できます。
最初は少し冗長に思えるかもしれませんが、GitLab CIとJenkinsを組み合わせることは非常に強力です。
この設計のもう1つの利点は、ツール間の疎結合があることです。
もちろん、この設計には代償を払う必要があります。初期設定は面倒であり、多くのツールについて最低限の理解を深める必要があります。
このため、このような設定はお勧めしません。
あなたがこれらの状況のどちらにもいないならば、あなたはたぶん2つのうちの1つだけで、両方ではないほうがよいです。
GitLab CIとJenkinsの両方に賛否両論があります。どちらも強力なツールです。それで、どちらを選ぶべきですか?
回答1
あなたのチーム(または近い人)がすでに一定レベルの専門知識を持っているものを選択してください。
回答2
あなたがすべてCI技術の新入生であるならば、ただ1つを選んで、行ってください。
GitLabを使用していて、今後もそうするかどうかわからない場合は、GitLab CIを選択したことですべてのCI/CDパイプラインがゴミ箱に捨てられることを意味します。
最後の言葉は次のとおりです。バランスはプラグインが多いため、少しJenkinsに傾いていますが、GitLab CIがすぐにギャップを埋める可能性があります。
GitLab CIを使った最近の実験から、いくつかの発見を加えたいと思います。 11.6と11.7に付属の機能はただ素晴らしいです!
特に私は基本的にあなたがmerge_request
またはonly
のために別々のパイプラインを構築することを可能にするPush
条件が大好きです(完全なリストはここに です )
また、私は本当にプラグインがないのが好きです。もっと複雑な機能が必要な場合は、必要な機能を処理するカスタムDockerイメージを書くだけです(これは drone.io で見ることができるのと同じ概念です)。
あなたが DRY について疑問に思っているなら、それは今日絶対に可能です!あなたの「テンプレート」を書くことができます
.myTemplate:
image: node:10.14.2
script:
- npm install
- npm run test
それらを何らかの公開リポジトリに入れて、メインパイプラインに含めます。
include:
- remote: https://....
そして、それらを使って仕事を広げましょう。
test:
extends: .myTemplate
only:
refs: ["master"]
variables:
- $CI_PIPELINE_SOURCE == "Push"
私はGitLab CIが大好きです!ええ、これまでのところカバレッジのある素敵なグラフを描くことはできませんが、全体としては本当にきれいです。ツール!
編集(2019-02-23):これが私のGitLab CIで好きなものについての投稿です 。それは11.7 "時代"で書かれていたので、この答えを読んでいるとき、GitLab CIはおそらくもっと多くの機能を持っています。