Подтвердить что ты не робот

Где я могу разместить свои учетные данные при использовании Ivy и репозитория частной компании?

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

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

Не предполагается ли файл ivysettings.xml в vcs?

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

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

    <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 так же, как и раньше, но не разделяйте атрибуты имени пользователя и пароля

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

Ответ 3

Образец 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>

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

Ответ 4

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