web-dev-qa-db-ja.com

Gradle公開用のGitLab CIシー​​クレット変数

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 があるようですが、回避策はありますか?

9

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 "…"
    }
}
10
madhead

ここに私がそれを解決した方法があります(残念ながら公式の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
        }
    }
}
3
chrismay

環境変数を直接使用してGradleプロパティを設定できます。完全なドキュメント here を参照してください。

あなたの場合、artifactUserartifactPassを環境変数として設定します(最も安全なものとして)。

1
mohamnag