Где я могу разместить свои учетные данные при использовании Ivy и хранилища частной компании? - PullRequest
14 голосов
/ 21 сентября 2011

Я использую Ant + Ivy, и моя компания недавно установила сервер Nexus для наших собственных частных библиотек.Ivy может получить зависимости от сервера Nexus, используя ibilio resolver и m2compatible = true, но я должен поместить свои учетные данные в файл ivysettings.xml.

Как разные разработчики должны хранить свои учетные данные?

Разве файл ivysettings.xml не должен быть зафиксирован в vcs?

Я действительно не хочу хранить свой пароль в виде простого текста.

Ответы [ 4 ]

12 голосов
/ 21 сентября 2011

Используйте файл настроек со свойствами, управляющими учетными данными 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

Обновление / улучшение

Хранение паролей в качестве свойств в файловой системе требует шифрования.

Jasypt имеет программу командной строки, которая может генерировать зашифрованные строки:

$ 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

Это означает, что решение подходит только для сокрытия данных в покое.

8 голосов
/ 04 ноября 2012

Для моих целей учетные данные командной строки не были доступны, потому что я запускаю Jenkins, и они будут четко вставлены в выходные данные сборки, поэтому здесь было мое решение, которое обеспечивает баланс, будучи достаточно безопасным.

  • Создайте файл свойств в вашем домашнем каталоге, который будет содержать конфиденциальную информацию (назовем ее «maven.repo.properties»)

    repo.username=admin
    repo.password=password
    
  • В верхней части файла сборки импортируйте файл свойств

    <property file="${user.home}/maven.repo.properties"/>
    
  • В вашей цели публикации в build.xml укажите местоположение файла настроек ivy (который проверяетсядля управления кодом), но встраивайте свои учетные свойства

    <target name="publish">
        <ivy:settings file="ivysettings.xml">
            <credentials host="repohostname" realm="Artifactory Realm" username="${repo.username}" passwd="${repo.password}"/>
        </ivy:settings>
        <!-- ivy:makepom and ivy:publish targets go here -->
    </target>
    
  • Создайте свой ivysettings.xml, как вы делали это раньше, но удалите атрибуты username и passwd

Затем вы можете использовать разрешения вашей операционной системы, чтобы убедиться, что файл maven.repo.properties правильно скрыт от всех, кроме вас (или вашей автоматической сборкиментальность).

2 голосов
/ 27 ноября 2014

Пример ответа ivysettings.xml в ответе Марка О'Коннора должен быть следующим:

<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>

Значит, имена свойств должны , а не быть окружены $ {...} (мне потребовалось довольно много времени, чтобы выяснить, почему это не удалось - но теперь я знаю, как отлаживать доступ ivy - используйте commons-httpclient-3.0, установите все подробности и т. д.)

0 голосов
/ 21 сентября 2011

Дополнительно к ответу Марка О'Коннора вы можете скрыть пароль от своей повседневной работы и от посторонних глаз ваших коллег, поместив эти свойства либо в файл запуска antrc , либо в среду переменные , используемые ant. Обратите внимание, что они не очень безопасны в любом месте.

...