GitLab CI Gradle 发布的秘密变量
GitLab CI secret variables for Gradle publish
如何设置 Gradle 使用 GitLab CI 秘密变量发布任务用户凭据?我正在使用 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中提取的或者变量没有正确转换,它在根项目目录中)
方法一
'./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
方法二
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
我正在使用 openjdk:8-jdk-slim
图像使用 gradle 包装器进行构建。似乎有几个 issues 有这种变量用法,我们有什么解决方法吗?
您可以直接使用环境变量来设置 gradle 属性,请参阅完整文档 here。
在你的情况下,将 artifactUser
和 artifactPass
设置为环境变量(最好是秘密变量)。
您的 .gitlab-ci.yml
中不需要 env.
前缀。您也不需要重新导出变量。
如果您在项目的 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 使用 GitLab CI 秘密变量发布任务用户凭据?我正在使用 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中提取的或者变量没有正确转换,它在根项目目录中)
方法一
'./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
方法二
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
我正在使用 openjdk:8-jdk-slim
图像使用 gradle 包装器进行构建。似乎有几个 issues 有这种变量用法,我们有什么解决方法吗?
您可以直接使用环境变量来设置 gradle 属性,请参阅完整文档 here。
在你的情况下,将 artifactUser
和 artifactPass
设置为环境变量(最好是秘密变量)。
您的 .gitlab-ci.yml
中不需要 env.
前缀。您也不需要重新导出变量。
如果您在项目的 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
}
}
}