在哪里放置不应提交的Gradle配置(即凭证)?

Lór*_*tér 143 gradle

我正在尝试将Gradle构建的工件部署到Maven仓库,我需要为其指定凭据.这个现在工作正常:

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: "http://.../nexus/content/repositories/snapshots/") {
                authentication(userName: "admin", password: "admin123")
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我不喜欢将凭据存储在源代码管理中.使用Maven,我将定义一个服务器配置,并在我的分配中分配凭据~/.m2/settings.xml.我如何使用Gradle做类似的事情?

Pet*_*ser 212

〜/ .gradle/gradle.properties:

mavenUser=admin
mavenPassword=admin123
Run Code Online (Sandbox Code Playgroud)

build.gradle:

...
authentication(userName: mavenUser, password: mavenPassword)
Run Code Online (Sandbox Code Playgroud)

  • 不是Gradle用户家中的那个(参见上面的路径). (19认同)
  • 有没有办法做到这一点并避免将密码以纯文本形式存储在环境变量或文本文件中? (4认同)
  • 不应该将 `gradle.properties` 签入到 `VCS` 中吗? (2认同)
  • 我建议传递项目属性如下身份验证(userName:project.properties.mavenUser,密码:project.properties.mavenPassword)当没有指定属性mavenUser/Password时,这不会使构建失败. (2认同)

que*_*ire 78

第一个答案仍然有效,但API在过去已发生变化.由于我的编辑没有被接受,我将其作为单独的答案发布.

该方法authentication()仅用于提供身份验证方法(例如Basic),但不提供任何凭据.

您也不应该使用它,因为它在失败时打印凭证!

这是他的样子 build.gradle

    maven {
        credentials {
            username "$mavenUser"
            password "$mavenPassword"
        }
        url 'https://maven.yourcorp.net/'
   }
Run Code Online (Sandbox Code Playgroud)

gradle.properties你的userhome目录中:

mavenUser=admin
mavenPassword=admin123
Run Code Online (Sandbox Code Playgroud)

还要确保将其GRADLE_USER_HOME设置为~/.gradle否则将无法解析其中的属性文件.

也可以看看:

https://docs.gradle.org/current/userguide/build_environment.html

https://docs.gradle.org/current/userguide/dependency_management.html(23.6.4.1)

  • OP在命名空间uploadArchives> repositories> mavenDeployer> repository>身份验证中使用身份验证.他们仍然希望使用我认为的uploadArchives,那么OP的构建配置如何应用您的解决方案?他们需要删除身份验证,它会工作吗? (4认同)
  • 谢谢@问卷!作为补充信息,在使用 Kotlin DSL 时,我们还必须声明 `val mavenUser: String by settings` 和 `val mavenPassword: String by settings` (如果存储库在 `settings.gradle.kts` 中声明)或 `val mavenUser: String by project` 和 `val mavenPassword: String by project` (如果存储库在 `build.gradle.kts` 中声明) (2认同)

Kri*_*raj 13

如果您有用户特定的凭据(即每个开发人员可能有不同的用户名/密码),那么我建议使用gradle-properties-plugin.

  1. 将默认值放入 gradle.properties
  2. 每个开发人员都会覆盖gradle-local.properties(这应该被git忽略).

这比覆盖使用更好,$USER_HOME/.gradle/gradle.properties因为不同的项目可能具有相同的属性名称.


luc*_*ell 12

您还可以在命令行上提供变量-PmavenUser=user -PmavenPassword=password.

这可能有用,因为某些原因你不能使用gradle.properties文件.例如,在构建服务器上,我们使用Gradle -g选项,以便每个构建计划都有自己的构建计划GRADLE_HOME.


Dav*_*que 7

您可以将凭据放在属性文件中,并使用以下内容读取它:

Properties props = new Properties() 
props.load(new FileInputStream("yourPath/credentials.properties")) 
project.setProperty('props', props)
Run Code Online (Sandbox Code Playgroud)

另一种方法是在OS级别定义环境变量并使用以下方法读取它们:

System.getenv()['YOUR_ENV_VARIABLE']
Run Code Online (Sandbox Code Playgroud)


Gab*_*hen 5

对于在 MacOS 上构建的人,并且不喜欢将密码以明文形式留在机器上,您可以使用钥匙串工具来存储凭据,然后将其注入构建中。致谢 Viktor Eriksson。 https://piloxa.gitlab.io/posts/safer-passwords-in-gradle/