Codefresh vs GitLab

GitLab compared to other DevOps tools

このページのコンテンツ

要約

Codefresh is a CI/CD tool designed for containers and Kubernetes. Codefresh features a GitLab integration that allows you to use GitLab for version control and run Codefresh pipelines on your code. Codefresh has some features that make it more mature than GitLab for running pipelines across multiple projects. But it lacks the benefits of a single application.

Codefresh charges for builds per month, as well as concurrent builds. GitLab has no such limitations with the ability to elastically scale Runners to handle as many concurrent builds as needed on demand and then scale down so you aren't paying to keep inactive Runners up.

Codefresh only offers a self-managed option for Enterprise pricing. Free, Basic, and Pro tiers are for SaaS-only. GitLab offers self-managed and SaaS options at every price point.

リソース

コメント/逸話

Additional CodeFresh Capabilities

Private Helm repository

Global Helm repo configuration

Helm Repository browser

Helm release boards

Helm environment board

Zero configuration caching/artifacts using docker volumes

Distributed Docker layer caching

Custom docker image annotations

Inline pipeline editor

比較

FEATURES

統合されたコンテナレジストリ

GitLab Container Registryは、Dockerイメージのためのセキュアでプライベートなレジストリです。 GitLab CIからイメージを簡単にアップロードしたりダウンロードしたりすることができます。 Gitリポジトリ管理と完全にインテグレーションされています。 (Codefresh社は2020年5月1日をもってプライベートなDockerレジストリのサポートを終了する予定です。)

コンテナレジストリのドキュメント

レビューアプリで変更をプレビュー

GitLab CI/CDを利用して、ブランチごとに新しい環境を作成することができ、開発プロセスを高速化できます。自分のブランチをプレビューできるマージリクエスト用の動的な環境を起動できます。レビューアプリは静的・動的なURLの両方をサポートします。

レビューアプリの詳細

包括的なAPI

GitLabは、インテグレーションの開発を可能にするために、多くの機能をAPIとして提供しています。

APIのドキュメントを表示

CI/CD 水平自動スケール

GitLab CI/CDのクラウドネイティブなアーキテクチャでは、ワークロードが増加した場合に、新しいノードを追加することで簡単に水平方向にスケールできます。GitLab Runnerはパイプライン処理が開始されると、自動的に新しいコンテナを作成し、処理が完了して不要になったコンテナを削除します。これにより、CI/CDのコストを抑えることができます。.

GitLab CI/CDの水平オートスケーリングの詳細

CI/CD パイプラインダッシュボード

プロジェクトやグループ全体のパイプラインの履歴と現在のステータスをユーザーごとにカスタマイズできる単一のダッシュボードで視覚化します。

オペレーションダッシュボードでのプロジェクト間のパイプラインの詳細

グループレベルのDockerレジストリブラウザ

複数のリポジトリのイメージを単一の UI ビューで表示します。

GitLab コンテナレジストリの詳細

Helm チャートリポジトリをサポート

Helm Chartの保存と取得をサポートします

GitLab 課題を見る

柔軟なパイプライングラフ

複数のジョブを直列、または並列に実行するパイプラインの構造は非常に複雑です。 GitLabでは単一のパイプライングラフですべてのジョブのステータスを表示できるので、 何が起こっているのかを簡単に確認できます。

パイプライングラフの詳細

パイプラインをスケジュール実行

cronのように、パイプラインをスケジュール実行できます。

GitLabでパイプラインがスケジュール実行される仕組の詳細

CI/CDジョブをWindowsで実行

GitLab RunnerはWindowsをサポートしているので、ジョブをこのプラットフォームでネイティブに実行できます。 PowerShellやバッチファイルを活用することで、Windowsに基づくプロジェクトを自動で構築、テスト、デプロイすることが可能です。

WindowsにGitLab Runnerをインストール

macOSでCI/CDのジョブを実行

GitLab RunnerはmacOSをサポートしているので、このプラットフォーム上でネイティブにジョブを実行できます。 シェルスクリプトやコマンドラインツールを利用して、macOSベースのプロジェクトのビルド、テスト、デプロイを自動化できます。

macOSにGitLab Runnerをインストール

Linux ARMでCI/CDのジョブを実行

GitLab RunnerはARMアーキテクチャのLinuxをサポートしているので、このプラットフォーム上でネイティブにジョブを実行できます。 シェルスクリプトやコマンドラインツールを利用して、Linux ARMベースのプロジェクトのビルド、テスト、デプロイを自動化できます。

LinuxにGitLab Runnerをインストール

FreeBSDでCI/CDのジョブを実行

GitLab RunnerはFreeBSDをサポートしているので、このプラットフォーム上でネイティブにジョブを実行できます。 シェルスクリプトやコマンドラインツールを利用して、FreeBSDベースのプロジェクトのビルド、テスト、デプロイを自動化できます。

FreeBSDにGitLab Runnerをインストール

パイプラインのコードカバレッジを表示

GitLabでは、カスタマイズ可能な正規表現を使用してジョブの出力をパースして、SimpleCovのようなツールが生成するコードカバレッジを取得できます。 取得したデータはUIに自動的に表示され、HTMLページなどに埋め込むためのバッジとして使用することもできます。

GitLabでコードカバレッジの生成と表示の詳細

GitLab CI/CDでの各コマンドの実行時間の詳細

他のCIシステムの中には、ジョブ全体の実行時間に加えて、各コマンドの実行時間を表示できるものがあります。 GitLabにも同様の機能を実装するための検討が行われています。

この課題の詳細を確認

Auto DevOps

Auto DevOps機能を使用すると、ソフトウェア開発ライフサイクルの自動設定が適用されます。 これにより、DevOpsのベストプラクティスに従って、プロジェクトを推進することができます。

Auto DevOpsの詳細なドキュメントを確認

保護Runner

保護Runnerを使用すると、デプロイ用の秘密鍵のような、機密情報を保護することができます。 保護ブランチで実行されるジョブのみが、保護Runnerにアクセスできます。

この課題の詳細を確認

構築済みのKubernetesクラスタと容易に連携

構築済みのKubernetesクラスターをプロジェクトに追加できます。CI/CDパイプラインから、 追加したKubernetesクラスターへ簡単にアクセスでき、Review Appsをホストしたり、アプリケーションをデプロイしたりすることができます。

この課題の詳細を確認

GKE上にKubernetesクラスターを簡単に構築

Googleアカウントに接続して、いくつかの情報を入力するだけで、 プロジェクトから直接GKE上にKubernetesクラスターを構築できます。構築したクラスターは、Auto DevOpsでアプリケーションをデプロイのに使用することができます。

この課題の詳細を確認

複数のKubernetesクラスターをサポート

ステージングや本番環境のような異なる環境を異なるKubernetesクラスターに簡単にデプロイできます。 これにより、ステージングと本番環境のデータを完全に分離することができます。

この課題の詳細を確認

Kubernetesクラスター用アプリケーションを簡単にデプロイ

Helm Tiller、Nginx Ingress、Cert-Manager、Prometheus、GitLab Runner、JupyterHub、KnativeをGitLabのWeb UIから1クリックでクラスターにインストールできます。

GKEクラスターにアプリケーションをインストールのドキュメントを確認

失敗したCIのジョブを自動で再実行

.gitla-ci.ymlに特別なキーワードを記述することで、GitLab CIでジョブが失敗した場合に、 指定の回数だけジョブを自動で再実行できます。

失敗したCIのジョブを自動で再実行の詳細

パイプラインのセキュリティ

保護ブランチで実行されるCI/CDパイプラインに対して、定義したセキュリティルールが守られているかチェックできます。 パイプラインのセキュリティは、手動で作成したパイプライン、再実行したジョブ、手動アクションにも適用されます。

パイプラインのセキュリティの詳細

外部のCI定義ファイルをインクルード

複数のプロジェクトで共通なジョブのテンプレートとして再利用するために、 外部のCI定義ファイルをインクルードできます。

外部ファイルのインクルードの詳細

静的アプリケーションセキュリティテスト

GitLab では、CI/CD パイプラインで静的アプリケーションセキュリティテスト (SAST) を簡単に実行することができます。 アプリケーションに含まれるライブラリの中に脆弱なソースコードや よく知られたセキュリティバグがないかどうかをチェックします。 結果はマージリクエストとパイプラインビューに表示されます。 この機能は [Auto DevOps](https://docs.gitlab.com/ee/topics/autodevops/stages.html#auto-sast) の一部として利用可能で、デフォルトでのセキュリティを提供しています。

静的アプリケーションセキュリティテストの詳細

機密情報の検出

GitLab では、CI/CD パイプラインで機密情報の検出を行い、意図せずにコミットされた機密情報をチェックします。 結果はマージリクエストやパイプラインビューに表示されます。 この機能は [Auto DevOps](https://docs.gitlab.com/ee/topics/autodevops/) の一部として提供されています。

機密情報の検出の詳細

依存関係の脆弱性スキャン

GitLabはアプリケーションが使用するライブラリに存在する既知のセキュリティバグを自動的に検出し、アプリケーションを脆弱性から保護します。 依存性スキャンの結果はマージリクエストおよびパイプラインの画面に表示されます。 この機能は[Auto DevOps](https://docs.gitlab.com/ee/topics/autodevops/#auto-sast)の一部として利用できます。

依存関係の脆弱性スキャンの詳細

コンテナの脆弱性スキャン

アプリケーションのDockerイメージをビルドする際に、コードをデプロイする環境に既知の脆弱性が存在しないかGitLabで確認できます。 コンテナスキャンの結果はマージリクエストとパイプラインに表示されます。 この機能は[Auto DevOps](https://docs.gitlab.com/ee/topics/autodevops/#auto-sast)の一部として利用できます。

コンテナの脆弱性スキャンの詳細

動的アプリケーションセキュリティテスト

オンラインのアプリケーションに対して、GitLabのCI/CDパイプラインで動的アプリケーションセキュリティテスト(DAST)を実行できます。 これにより、アプリケーションにXSSや認証フローの不備のような脆弱性が存在しないかをテストできます。 テスト結果はマージリクエストとパイプラインに表示されます。 この機能は[Auto DevOps](https://docs.gitlab.com/ee/topics/autodevops/#auto-sast)の一部として利用できます。

コンテナのアプリケーションセキュリティの詳細

双方向なアプリケーションセキュリティテスト

[IAST](https://blogs.gartner.com/neil_macdonald/2012/01/30/interactive-application-security-testing/) は静的 / 動的アプリケーションセキュリティテスト方法の要素を組み合わせて、結果の全体的な品質を改善します。通常 IAST はライブラリの呼び出しなどを監視するために、エージェントを使用してアプリケーションを計測します。GitLab はまだこの機能を提供していません。

ブラウザーパフォーマンステスト

マスターにマージする前に、Web アプリケーションのパフォーマンスの低下を簡単に検出します。ブラウザのパフォーマンステストは Auto DevOps に含まれており、設定なしでルートページの自動的なパフォーマンス分析を提供します。

ブラウザーパフォーマンステストの詳細

Load Performance Testing

Easily detect performance regressions for software under load, prior to merging into master.

Learn more about Load Performance Testing

レビューアプリのアクセシビリティテストを自動化

アクセシビリティテストを実施することは、製品を利用するすべてのユーザーにサービスを提供するために重要です。 GitLab では、masterにマージする前にアクセシビリティレポートを自動的に生成することができます。

自動アクセシビリティテストの詳細

仮想パッケージリポジトリを活用して、パッケージ管理ワークフローを簡素化します。

仮想リポジトリとは、単一の論理 URL を通じてアクセスされるローカル、リモート、その他の仮想リポジトリの集合体です。

GitLabのエピックで、この機能を追加するために必要な課題を詳細に説明しています。

より安全で信頼性の高いビルドのためのリモートパッケージレジストリをプロキシします。

多くの組織では、頻繁に利用しているアップストリームのイメージ/パッケージ用のキャッシュプロキシを使うのが便利です。CI/CD の場合は、プロキシはリクエストを受信し、レジストリからアップストリームのイメージを渡す責任があり、パイプラインを高速化するためのプルスルーキャッシュとして機能します。

依存性プロキシの詳細

Conan (C/C++) リポジトリ

Conan は、開発者がネイティブバイナリを作成, 共有するためのオープンソースの分散型 C/C++ マルチプラットフォームパッケージです。

Conanリポジトリに関するドキュメント

Maven (Java) リポジトリ

GitLab の Maven リポジトリにより、組織全体での Java ライブラリの公開と共有が簡単になり、依存関係が正しく管理されるようになります。認証と承認を含め、GitLab と完全に統合されています。

Maven リポジトリのドキュメント

NPM レジストリ

GitLab の NPM リポジトリにより、組織全体で NPM パッケージを公開および共有しやすくなり、依存関係が正しく管理されるようになります。認証と承認を含め、GitLab と完全に統合されています。

NPM リポジトリに関するドキュメント

NuGet (.NET) リポジトリ

GitLabのNuGetリポジトリは、C#/.NETの開発者がNuGetクライアントやVisual Studioを使ってパッケージを作成、公開、共有することを可能にします。

NuGet リポジトリのドキュメント

PyPI (Python) リポジトリ

Python開発者はGitLabをリモートPyPIリポジトリとして設定し、PyPIクライアントやGitLab CI/CDを使ってパッケージをビルド、公開、共有することができます。

エピックで詳細を確認

RPM (Linux) リポジトリ

この計画中の機能により、Linux開発者は、ソースコードやパイプラインと一緒にRPMパッケージを構築、公開、共有することができます。

課題で詳細を確認

Debian (Linux) リポジトリ

この計画中の機能により、Linux 開発者はソースコードやパイプラインと一緒に Debian パッケージを構築、公開、共有できるようになります。

課題で詳細を確認

RubyGems (Ruby) リポジトリ

この計画中の機能は、Ruby開発者がGitLabをリモートのRubyGemsリポジトリとして設定し、コマンドラインやGitLab CI/CDを使ってパッケージをビルド、公開、共有できるようにするものです。 また、GitLab自体の開発にとっても貴重な機能であり、[dogfooding](https://about.gitlab.com/handbook/values/#dogfooding)にも役立ちます。

課題で詳細を確認

Go リポジトリ

この計画中の機能により、Go開発者はソースコードやパイプラインと一緒にパッケージを構築、公開、共有できるようになります。 これはGitLab自体の開発にとっても貴重な機能であり、[dogfooding](https://about.gitlab.com/handbook/values/#dogfooding)にも役立ちます。

課題で詳細を確認

Composer (PHP) リポジトリ

この計画中の機能により、PHP 開発者はソースコードやパイプラインと一緒にパッケージを構築、公開、共有することができるようになります。

課題で詳細を確認

REST APIでパッケージレジストリを使用する

REST API を使用して GitLab パッケージレジストリの自動化とインテグレーションをサポートします。

APIに関するドキュメント

リポジトリ毎の複数のパイプラインを定義

GitLab では複数プロジェクトにまたがるビューを提供する複数プロジェクトのパイプラインがありますが、各パイプライン定義は特定のプロジェクトに関連付けられた YAML ファイルとして存在します。GitLab には今のところ 1 つの YAML ファイルに複数のパイプラインを定義する機能はありません。

この課題の詳細を確認

monorepo の明示的なサポート

特定のパスやファイルに変更がある場合にのみジョブを実行する機能は、単一のレポに多くのマイクロサービスを含むモノレポをサポートします。

CI/CD のみ/以外の実行の詳細

Docker レジストリのグローバルブラウザ

複数のリポジトリのイメージを単一の UI ビューで表示します。

この課題の詳細を確認

グループレベルのKubernetesクラスター設定

グループのためのKubernetesクラスター設定を単一のUIで表示します。

この課題の詳細を確認

インスタンスレベルのKubernetesクラスター設定

GitLab インスタンスの Kubernetes クラスター設定を単一の UI で表示します。

この課題の詳細を確認

ファーストクラスのコンテナ作成

実装の詳細を定義する必要なく、CI/CD のジョブ中にコンテナを構築するように定義できる機能です。

この課題の詳細を確認

グループレベルの Kubernetes クラスター

グループやサブグループ内の全てのプロジェクトに使用できるグループレベルの Kubernetes クラスターを作成します。

グループレベルのクラスタの詳細

インスタンスレベルの Kubernetes クラスタ

同一の GitLab インスタンス内の全てのグループやプロジェクトで使用できるインスタンスレベルの Kubernetes クラスタを作成します。

インスタンスレベルクラスタの詳細