在使用常春藤和私人公司存储库时,我在哪里放置凭据?

我正在使用Ant + Ivy,我的公司最近为我们自己的私有库设置了一个Nexus服务器。 Ivy可以通过使用ibilio解析器和m2compatible = true从Nexus服务器获取依赖关系,但我必须将我的凭据放在ivysettings.xml文件中。

不同的开发人员应该如何存储他们的凭据?

是不是应该在vcs中提交ivysettings.xml文件?

我真的不想以纯文本格式存储我的密码。

使用包含控制Nexus凭据的属性的设置文件:

      .. ..  

运行构建时,您可以指定真实的用户名和密码:

 ant -Drepo.user=mark -Drepo.pass=s3Cret 

更新/增强

将密码存储为文件系统上的属性需要加密。

Jasypt有一个可以生成加密字符串的命令行程序:

 $ encrypt.sh verbose=0 password=123 input=s3Cret hXiMYkpsPY7j3aIh/2/vfQ== 

这可以保存在build的属性文件中:

 username=bill password=ENC(hXiMYkpsPY7j3aIh/2/vfQ==) 

以下ANT目标将解密任何加密的ANT属性:

    import org.jasypt.properties.EncryptableProperties import org.jasypt.encryption.pbe.StandardPBEStringEncryptor StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor() encryptor.setPassword(properties["master.pass"]) Properties props = new EncryptableProperties((Properties)properties, encryptor); props.propertyNames().each { properties[it] = props.getProperty(it) }   

当然,为了使这项工作,需要将用于加密属性的密码指定为构建的一部分。

 ant -Dmaster.pass=123 

这意味着该解决方案仅适用于隐藏静态数据。

为了我的目的,命令行凭据不是一个选项,因为我正在运行Jenkins并且它们被明确地粘贴在构建输出上,所以这是我的解决方案,通过合理安全来达到平衡。

  • 在主目录中创建包含敏感信息的属性文件(我们称之为“maven.repo.properties”)

     repo.username=admin repo.password=password 
  • 在构建文件的顶部附近,导入属性文件

      
  • 在build.xml下的发布目标中,设置常春藤设置文件位置(确实已签入代码控制)但嵌入了凭据属性

           
  • 像以前一样创建你的ivysettings.xml,但删除username和passwd属性

然后,您可以利用操作系统的权限来确保除了您(或您的自动构建实现)之外的所有人都正确地隐藏了maven.repo.properties文件。

Mark O’Connor答案中的ivysettings.xml示例实际应如下:

       ..  

意思是,属性名称应该被$ {…}包围(我花了很长时间才找出失败的原因 – 但现在我知道如何调试常春藤访问 – 使用commons-httpclient-3.0,将所有内容设置为详细等)

除了Mark O’Connor的回答之外,您可以通过将这些属性放入antrc启动文件或ant使用的环境变量中来隐藏日常工作中的密码以及工友的窥探密码。 请注意,它们在任何一个地方都不是很安全。