Javaパイプラインの例

図cicd- process- pipeline.pngの説明
パイプライン・オーケストレータは、このJavaパイプラインの例で、一般的に使用されるいくつかのツールを使用してパイプライン・プロセスを駆動します。プロセスのステップは次のとおりです。
- コードの変更
静的アプリケーション・セキュリティ・テスト(SAST)を使用して資格証明の基本的なGitチェックを実行し、パイプラインを開始します。Gitflowアプローチを使用して、GitLabやGithHubなどのツールを使用してコードがどのように構造化されるかに基づいてコード・リポジトリを処理します。コードは、バージョン分岐、マージおよび制御ソースの変更へのリリースを持つように構造化できます。コードは、開発、テスト、本番前、本番などの環境にマッピングされます。リポジトリの様々な部分にコミットすると、Sastアクションがトリガーされます。
- たとえば、GitHubには静的セキュリティ・スキャンが組み込まれており、コードおよび構成ファイル内のパスワードとトークンを認識するパターンが検索されます。
- コードをビルド
JAR/WAR/EARを生成し、必要な依存性を取得します。Java Apache Mavenなどのツールを使用して、JAR (または関連するデプロイ可能なアーカイブ・ファイル)をコンパイルおよび作成し、アーティファクトに署名できます。
- サード・パーティの依存関係の管理: Snykなどのツールを使用して、コードの依存関係およびサードパーティ・ライブラリを管理します。同期チェックを行い、受け入れられたソースからの依存関係が正しいことを確認し、悪意のあるコンテンツを検索します。外部依存アーティファクトを取得、検査、承認および格納します。サードパーティの依存関係を管理すると、Archiva、Nexus OSSなどのツールを使用して、依存関係をローカルに格納できます。依存性を制御して、信頼できるオリジンを持つようにすることもできます。これにより、Snyk、Nexus、scanOSなどのツールを使用して、依存関係が悪意のあるコンテンツで危険にさらされていないことを確認できます。
- 品質とコンプライアンスのチェック
OWASP上位10の問題をスキャンし、SonarcubeやLintなどのツールを使用してコーディング標準へのコンプライアンスを確認します。
- ユニット・テストの実行
ユニット・テストを実行し、JACOCOおよびJUnitを使用してコード・カバレッジ・データを取得します。JACOCOは、どのコード行が実行されたか、およびどのコードが統計的にテストされたかを確認するなどのカバレッジ・コレクションを提供します。JUnitはユニット・テストを実行します。説明が役立つと思われる場合は、その説明を拡張することもできます。
- APIテストの実行
Dredd、Apiary、Swagger Hubなどのツールを使用して、データを模擬してAPIをテストし、クライアントをテストします。
- テスト・コンポーネントとUX
ブラック・ボックス・コンポーネントおよびUI要素をテストします。パフォーマンスを測定して、基本的な問題がないことを確認します。SeleniumやJMeterなどのツールを使用して、テスト・カバレッジ・メトリックを収集します。JMeterは、ユーザー・エクスペリエンスとパフォーマンス・テストを実行し、ユーザー・ワークフローをテストします。Seleniumは、ユーザー・インタフェース要素の実行を駆動します。
- テスト・セキュリティ
Zapを使用した不正なAPIコール、過剰なペイロード、インジェクション攻撃などの脆弱性のコードをテストします。冗長コードおよび準備されたSQL文をチェックして、セキュリティ・テストを実行します。
- デプロイメントのパッケージ
ソリューションをコンテナとしてパッケージ化し、パッケージを検証し、Docker Snykなどのツールを使用してコンテナの問題やベスト・プラクティスを確認します。
- ドキュメントの生成
有用なドキュメントを生成し、使用できるようにします。PandocやDoxygenなどのツールを使用してアーティファクトに署名します。Pandocはプロジェクトを次のステージにプッシュし、次のフェーズで使用するレジストリなどの信頼できるストアに追加します。
これらのステップのいずれかが失敗するか、プロセスが多くの警告を識別しすぎると、ビルドは失敗します。ビルドはプロセスのどの時点でも失敗し、後続のステップを続行できない可能性があります。ビルドが失敗すると、構成済の自動コード・プロモーションが防止されます。複数のフェーズがあるビルドに推奨されるツールの一部を使用して、各フェーズでのテストの実行をサポートできます。たとえば、システム・レベルのテストでは、エンタープライズ・ソリューション内の別のコンポーネントのアクションをシミュレートするのではなく、APIテスト・ツールを使用して外部サービスとしてシステムと対話できます。