Java および Kotlin 用の Gradle
前提条件
対象イメージ
|
通常、プロジェクトを構築してテストを実行するために必要なのは、プロジェクトのルートディレクトリで gradle build
コマンドを実行することだけです。オートメーションでこれを行うには 3 つの方法があります。
プロジェクトのビルド後の次のタスクは通常、ビルドアーティファクトの公開です。
(基本) プロジェクトをビルドし、Gradle ラッパーを使用してテストを実行する
Gradle プロジェクトを構築する最も簡単な方法は、プロジェクトルートで Gradle ラッパーを使用することです。コンテナーイメージには JRE/JDK 11 以降が必要であることに注意してください。例:
ラッパーが見つからない場合、ジョブは失敗します。
プロジェクトをビルドし、Kotlin スクリプトを使用してテストを実行する
ビルドスクリプトに Kotlin で記述された複雑なロジックが含まれている場合は、Space Gradle API を使用して Gradle コマンドを実行する必要があります。ベストプラクティスは、gradlew()
関数を呼び出して Gradle ラッパーを使用することです。これにより、Gradle が含まれていないコンテナーイメージを使用できるようになります (JRE/JDK は引き続き必要です)。
プロジェクトをビルドし、カスタムコンテナーイメージでテストを実行する
場合によっては、ビルドを実行するためにカスタム Docker イメージ (例: パッケージに保存されている) を使用する必要がある場合があります。このシナリオでは、自動化が内部でどのように機能するかを理解する必要があります。主なトリックは、テスト実行結果を受け取り、それを自動化に渡すことです。gradlew
コマンドを使用してビルドを実行する場合 (前述のように)、これは init.gradle
で初期化された特別なテスト結果リスナーによって解決されます。ブートストラップジョブには追加の手順が追加されます。つまり、この init.gradle
ファイルを使用して Gradle を初期化します。カスタム Docker コンテナーを実行する場合は、これを手動で行う必要があります。つまり、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") } } }
関連ページ:
![](https://pleiades.io/icons/jetbrains_logo.png)
Maven リポジトリの作成
プロジェクトに移動するリポジトリを作成する場所。プロジェクトのサイドバーで、パッケージを選択します。パッケージページで、新規リポジトリをクリックします。新しいパッケージリポジトリウィンドウで、リポジトリ設定を指定します。タイプ:Maven リポジトリを選択します。名前と説明: リポジトリ名 (一意の識別子である必要があります) と説明を指定します。アクセス: 認証されていないユーザーがリポジトリから読み取れるようにする場合は、Public を選択します。それ以外の場合は、Private を選択する...
![](https://resources.jetbrains.com/help/img/space/secretsMavenRepo.png)
Helm チャート
前提条件 Helm チャートは、プロジェクトソースの別のディレクトリに保存されます。チャートを Space パッケージに公開する場合は、プロジェクトに Docker レジストリがあることを確認してください。対象イメージ Helm を含む任意のイメージ。例: アルパイン /helm。Helm チャートを操作する場合の一般的な CI/CD タスクは、それをレジストリに公開することです。Space Automation を使用すると、チャートを Space Package または任意の外部レジストリに公開でき...