Gdzie umieścić moje dane uwierzytelniające podczas korzystania z Ivy i prywatnego repozytorium firmy?

Używam Ant + Ivy, a moja firma niedawno skonfigurowała Serwer Nexus dla naszych prywatnych bibliotek. Ivy może uzyskać zależności z serwera Nexus za pomocą ibilio resolver i m2compatible = true, ale muszę umieścić moje poświadczenia w ivysettings.plik xml.

Jak różni programiści mają przechowywać swoje poświadczenia?

Jest ivysettings.plik xml nie powinien być pobierany w vcs?

Naprawdę nie chcę zapisywać hasła w zwykłym tekście.

Author: kalithlev, 2011-09-21

4 answers

Użyj pliku ustawień z właściwościami kontrolującymi poświadczenia Nexusa:

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

Po uruchomieniu kompilacji możesz podać prawdziwą nazwę użytkownika i hasło:

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

Update / Enhancement

Przechowywanie haseł jako właściwości w systemie plików wymaga szyfrowania.

Jasypt posiada program wiersza poleceń, który może generować zaszyfrowane ciągi znaków:

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

Można to zapisać w pliku właściwości build:

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

Następujący cel mrówek odszyfruje wszelkie zaszyfrowane właściwości 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>

Oczywiście, aby to zadziałało, hasło używane do szyfrowania właściwości musi być określone jako część kompilacji.

ant -Dmaster.pass=123

Oznacza to, że rozwiązanie jest dobre tylko do ukrywania danych w spoczynku.

 12
Author: Mark O'Connor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-22 21:55:44

Dla moich celów poświadczenia wiersza poleceń nie były opcją, ponieważ używam Jenkinsa i byłyby wyraźnie wklejone na wyjście kompilacji, więc oto moje rozwiązanie, które zapewnia równowagę, będąc w miarę bezpiecznym.

  • Utwórz plik właściwości w katalogu domowym, który zawiera poufne informacje (nazwiemy go "maven.repo.właściwości")

    repo.username=admin
    repo.password=password
    
  • W pobliżu górnej części pliku kompilacji, zaimportuj właściwość plik

    <property file="${user.home}/maven.repo.properties"/>
    
  • W celu publikowania w trakcie budowania.xml, Ustaw lokalizację pliku ivy settings (który jest sprawdzany do kontroli kodu), ale osadzaj właściwości poświadczeń

    <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>
    
  • Utwórz swoje ustawienia ivysettings.xml tak jak wcześniej, ale Usuń atrybuty username i passwd

Możesz następnie wykorzystać uprawnienia systemu operacyjnego, aby upewnić się, że maven.repo.Plik Właściwości jest poprawnie ukryty przed wszystkimi oprócz Ciebie (lub Twoja automatyczna implementacja build).

 8
Author: Fred Drake,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-04 16:27:27

Ivysettings.przykład XML w odpowiedzi Marka O ' Connora powinien wyglądać następująco:

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

Oznacza, że nazwy właściwości powinny nie być otoczone przez ${...} (Zajęło mi trochę czasu, aby dowiedzieć się, dlaczego to nie powiodło się-ale teraz wiem, jak debugować ivy access-użyj commons-httpclient-3.0, ustawić wszystko na verbose itp.)

 2
Author: Remigius Stalder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-27 16:27:45

DODATKOWO do odpowiedzi Marka O ' Connora możesz ukryć hasło przed codzienną pracą i przed wścibskimi oczami kolegów z pracy, umieszczając te właściwości albo w pliku startowym antrc lub w zmiennych środowiskowych używanych przez ant. Należy pamiętać, że nie są one bardzo bezpieczne w żadnym miejscu.

 0
Author: A.H.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-21 19:43:38