Java および Kotlin 用の Gradle
前提条件
対象イメージ
|
通常、プロジェクトを構築してテストを実行するために必要なのは、プロジェクトのルートディレクトリで gradle build コマンドを実行することだけです。オートメーションでこれを行うには 3 つの方法があります。
プロジェクトのビルド後の次のタスクは通常、ビルドアーティファクトの公開です。
(基本) プロジェクトをビルドし、Gradle ラッパーを使用してテストを実行する
Gradle プロジェクトを構築する最も簡単な方法は、プロジェクトルートで Gradle ラッパーを使用することです。コンテナーイメージには JRE/JDK 11 以降が必要であることに注意してください。例:
ラッパーが見つからない場合、ジョブは失敗します。
プロジェクトをビルドし、Kotlin スクリプトを使用してテストを実行する
ビルドスクリプトに Kotlin で記述された複雑なロジックが含まれている場合は、Space Gradle API を使用して Gradle コマンドを実行する必要があります。ベストプラクティスは、gradlew() 関数を呼び出して Gradle ラッパーを使用することです。これにより、Gradle が含まれていないコンテナーイメージを使用できるようになります (JRE/JDK は引き続き必要です)。
プロジェクトをビルドし、カスタムコンテナーイメージでテストを実行する
場合によっては、ビルドを実行するためにカスタム Docker イメージ (例: パッケージに保存) を使用する必要があるかもしれません。このシナリオでは、Automation が内部でどのように動作するかを理解する必要があります。主なトリックは、テスト実行結果を受け取って Automation に渡すことです。ビルドを実行するために gradlew コマンドを使用する場合 (上記のように)、これは init.gradle で初期化された特別なテスト結果リスナーによって解決されます。ブートストラップジョブには追加の手順があります。この init.gradle ファイルを使用して Gradle を初期化します。カスタム Docker コンテナーを実行する場合は、これを手動で行う必要があります。つまり、Automation スクリプトに Gradle 初期化を追加します。
Maven アーティファクトを Space パッケージに公開する
プロジェクトの
build.gradleファイルを開きます。Maven プラグインへの参照を追加します。
apply plugin: 'maven-publish'publishingセクションで、パッケージのプロパティを指定します (生成されるパッケージ名はgroupId:artifactIdになります)。例: .jar ファイルを公開したいとします (長さのため、セクションの内容は縮小されています)。publishing { publications { maven(MavenPublication) { groupId = 'org.company' artifactId = 'sample' version = "0.9-SNAPSHOT" from components.java pom { name = 'My Library' description = 'A description of my library' ... } } } }publishingセクションのrepositoriesで、環境変数を使用してリポジトリ URL と資格情報を指定します。publishing { repositories { maven { credentials { // Automation has a special account for authentication in Space // account credentials are accessible via env vars username = "$System.env.JB_SPACE_CLIENT_ID" password = "$System.env.JB_SPACE_CLIENT_SECRET" } url = "https://maven.pkg.jetbrains.space/mycompany/p/projectkey/my-maven-repo" } } }プロジェクトの
.space.ktsファイルを編集します。例:job("Build and publish") { container(displayName = "Run publish script", image = "gradle") { kotlinScript { api -> api.gradle("build") api.gradle("publish") } } }
Maven アーティファクトを外部リポジトリに公開する
アーティファクトを外部 Maven リポジトリに公開することは、Space Packages リポジトリに公開することとほぼ同じです。唯一の違いは、資格情報をシークレットとパラメーターストレージのリポジトリに保存する必要があることです。
1 – 3 から Maven アーティファクトを Space パッケージに公開するまでの手順を繰り返します。
パラメーターとシークレットを作成するは、スクリプトが外部リポジトリにアクセスするために使用する必要があるユーザー名とパスワードを保存します。

build.gradle、publishing、repositoriesでは、環境変数を使用して外部リポジトリの URL と資格情報を指定します。publishing { repositories { maven { credentials { // we'll set these env vars in .space.kts username = "$System.env.USERNAME" password = "$System.env.PASSWORD" } url = "https://externalrepo.example.com/my-maven-repo" } } }プロジェクトの
.space.ktsファイルを編集します。例:job("Build and publish") { container(displayName = "Run publish script", image = "gradle") { // env vars for build.gradle env["USERNAME"] = "{{ project:repo_user }}" env["PASSWORD"] = "{{ project:repo_password }}" kotlinScript { api -> api.gradle("build") api.gradle("publish") } } }
カスタムの場所にある Gradle ラッパー
デフォルトでは、プロジェクトの gradlew ラッパーはプロジェクトのルートディレクトリにあります。ラッパーを実行できるようにするために、オートメーションはジョブの実行中に gradlew ファイルの実行フラグを設定します。プロジェクト内で gradlew ファイルが別のディレクトリ ( ./subfolder/gradlew など) にある場合、オートメーションはフラグを自動的に設定しません。その結果、オートメーションがラッパーを実行しようとすると、ジョブは Permission denied で失敗します。課題を解決するには、以下の手順に従ってください。
プロジェクトソース内の
gradlewファイルの実行フラグを設定します。例:gitを使用する場合 (プロジェクトルートでコマンドを実行):git update-index --chmod=+x ./subfolder/gradlew git commit -m "Make gradlew executable" git push origin mainプロジェクトの
.space.ktsファイルで、gradlewラッパーの場所を作業ディレクトリとして設定します。例:job("Run gradle build") { container(displayName = "Run gradlew from another dir", image = "gradle") { // path to gradlew relative to project root workDir = "subfolder" kotlinScript { api -> api.gradlew("build") } } }
関連ページ:
Maven リポジトリの作成
プロジェクトに移動するリポジトリを作成する場所。プロジェクトのサイドバーで、パッケージを選択します。パッケージページで、新規リポジトリをクリックします。新しいパッケージリポジトリウィンドウで、リポジトリ設定を指定します。タイプ:Maven リポジトリを選択します。名前と説明: リポジトリ名 (一意の識別子である必要があります) と説明を指定します。アクセス: 認証されていないユーザーがリポジトリから読み取れるようにする場合は、Public を選択します。それ以外の場合は、Private を選択する...
Helm チャート
前提条件 Helm チャートは、プロジェクトソースの別のディレクトリに保存されます。チャートを Space パッケージに公開する場合は、プロジェクトに Docker レジストリがあることを確認してください。対象イメージ Helm を含む任意のイメージ。例: アルパイン /helm。Helm チャートを操作する場合の一般的な CI/CD タスクは、それをレジストリに公開することです。Space Automation を使用すると、チャートを Space Package または任意の外部レジストリに公開でき...