首页 > 解决方案 > 用于 Gradle 发布的 GitLab CI 秘密变量

问题描述

如何使用 GitLab CI 秘密变量设置 Gradle 发布任务用户凭据?我正在使用gradle maven 发布插件,这里是 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 包装器构建图像。似乎这种变量使用存在几个问题,我们有什么解决方法吗?

标签: gradlegitlabgitlab-cigitlab-ci-runnergradlew

解决方案


env..gitlab-ci.yml. 您也不需要重新导出变量。

如果您在项目的 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 "…"
    }
}

推荐阅读