我使用Ant Ivy,而我公司最近为我们自己的私人图书馆设立了一个Nexus服务器. Ivy可以通过使用ibilio解析器和m2compatible = true从Nexus服务器获取依赖关系,但是我必须将凭据放在ivysettings.xml文件中.
不同的开发人员应该如何存储他们的凭据?
ivysettings.xml文件是不是应该在vcs中提交?
我真的不想用纯文本存储我的密码.
解决方法
使用具有控制Nexus凭据的属性的设置文件:
- <ivysettings>
- <property name="repo.host" value="default.mycompany.com" override="false"/>
- <property name="repo.realm" value="Sonatype Nexus Repository Manager" override="false"/>
- <property name="repo.user" value="deployment" override="false"/>
- <property name="repo.pass" value="deployment123" override="false"/>
- <credentials host="${repo.host}" realm="${repo.realm}" username="${repo.user}" passwd="${repo.pass}"/>
- ..
- ..
- </ivysettings>
运行构建时,您可以指定真实的用户名和密码:
- ant -Drepo.user=mark -Drepo.pass=s3Cret
更新/增强
- $encrypt.sh verbose=0 password=123 input=s3Cret
- hXiMYkpsPY7j3aIh/2/vfQ==
- username=bill
- password=ENC(hXiMYkpsPY7j3aIh/2/vfQ==)
以下ANT目标将解密任何加密的ANT属性:
- <target name="decrypt">
- <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpathref="build.path"/>
- <groovy>
- 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)
- }
- </groovy>
- </target>
当然,为了使这项工作,用于加密属性的密码需要被指定为构建的一部分.
- ant -Dmaster.pass=123
这意味着解决方案只适用于隐藏数据休息.