GitLab CIシークレット変数を使用してGradle公開タスクのユーザー資格情報をセットアップする方法私は gradle maven publish plugin を使用していますが、これはbuild.gradleからのスニペットです
repositories {
maven {
credentials {
username artifactUser
password artifactPass
}
url "..."
}
}
以下のようにgradle.properties
を使用しようとしました
artifactUser=${env.MAVEN_REPO_USER}
artifactPass=${env.MAVEN_REPO_PASS}
また、.gitlab-ci.yml
ファイルの秘密変数にアクセスするいくつかの方法(gradle.propertiesがgradleから取得されないか、変数が正しく変換されないため、ルートプロジェクトディレクトリにあります)
方法1
'./gradlew publish -x test -PartifactUser=${env.MAVEN_REPO_USER} -PartifactPass=${env.MAVEN_REPO_PASS}'
エラー:/bin/bash: line 56: -PartifactUser=${env.MAVEN_REPO_USER}: bad substitution
方法2
before_script:
- chmod +x ./gradlew
- export REPO_USER=${env.MAVEN_REPO_USER}
- export REPO_PASS=${env.MAVEN_REPO_PASS}
...
deploy:
stage: deploy
script:
- ./gradlew publish -x test -PartifactUser=$REPO_USER -PartifactPass=$REPO_PASS
Gradleラッパーを使用したビルドにopenjdk:8-jdk-slim
イメージを使用しています。このような変数の使用法にはいくつかの issues があるようですが、回避策はありますか?
env.
に.gitlab-ci.yml
prefinxは必要ありません。変数を再エクスポートする必要もありません。
プロジェクトのGitlab CI/CD設定でMAVEN_REPO_USER
およびMAVEN_REPO_PASS
という名前の変数を定義している場合は、Gradleスクリプトでそれらを使用できます。
repositories {
maven {
credentials {
username System.getenv("MAVEN_REPO_USER")
password System.getenv("MAVEN_REPO_PASS")
}
url "…"
}
}
ここに私がそれを解決した方法があります(残念ながら公式のGitLab docoはMavenに非常に焦点を当てています... :(
apply plugin: 'Java'
apply plugin: 'maven-publish'
compileJava.options.encoding = 'UTF-8'
group = 'com.example'
version = '1.0.9'
task zipSource(type: Zip) {
from file('files/test.Zip')
archiveClassifier = 'testZip'
}
publishing {
repositories {
maven {
name 'GitLab'
url 'https://gitlab.my-company.com/api/v4/projects/2302/packages/maven'
credentials(HttpHeaderCredentials) {
name = "Job-Token"
value = System.getenv("CI_JOB_TOKEN")
}
authentication {
header(HttpHeaderAuthentication)
}
}
}
publications {
mavenJava(MavenPublication) {
artifactId = 'project1-sample'
//deploy jar vom Java
from components.Java
//deploy arbitrary Zip file
artifact zipSource
}
}
}
環境変数を直接使用してGradleプロパティを設定できます。完全なドキュメント here を参照してください。
あなたの場合、artifactUser
とartifactPass
を環境変数として設定します(最も安全なものとして)。