Subversion esport / checkout in Dockerfile senza printingre la password sullo schermo

Vorrei scrivere un Dockerfile che esport una directory da un repository Subversion remoto nel context di creazione in modo da poter lavorare con questi file nei comandi successivi. Il repository è protetto con l'authentication utente / password.

Quello Dockerfile potrebbe sembrare così:

# base image FROM ubuntu # install subversion client RUN apt-get -y update && apt-get install -y subversion # export my repository RUN svn export --username=myUserName --password=myPassword http://subversion.myserver.com/path/to/directory # further commands, eg on container start run a file just downloaded from the repository CMD ["/bin/bash", "path/to/file.sh"] 

Tuttavia, questo ha l'inconveniente di printingre il mio nome utente e password sullo schermo o qualsiasi file di registro in cui è diretto lo stdout, come nel Step 2 : RUN svn export --username=myUserName --password=myPassword http://subversion.myserver.com/path/to/directory . Nel mio caso, questo è un log di creazione di Jenkins che è accessibile anche da altre persone che non dovrebbero vedere le credenziali.

Qual è il modo più semplice per hide l'eco del nome utente e della password nell'output?

Fino ad ora non ho trovato alcun modo per eseguire in modo silenzioso i comandi RUN in un Dockerfile durante la creazione dell'image. Forse la password potrebbe essere importta da qualche altra parte e allegata al command in precedenza, quindi non deve essere più printingta? O ci sono methods per l'authentication senza password in Subversion che functionrebbero nel context Dockerfile (in termini di impostazione senza interazione)?

Il server Subversion è in esecuzione in remoto in azienda e non nella mia macchina locale o nell'host Docker. A mio avviso, non ho accesso ad esso tranne che per accedere al mio repository tramite l'authentication username / password, in modo da copiare qualsiasi file chiave come root in alcune cartelle server potrebbe essere difficile.

Una soluzione è quella di aggiungere l'intera directory SVN che hai precedentemente verificato sul tuo file system builder (o aggiunto come svn:externals se il tuo Dockerfile trova in un archivio SVN come questo: svn propset svn:externals 'external_svn_directory http://subversion.myserver.com/path/to/directory' . , quindi fai un svn up ).

Quindi nel tuo Dockerfile puoi semplicemente:

 ADD external_svn_directory /tmp/external_svn_directory RUN svn export /tmp/external_svn_directory /path/where/to/export/to RUN rm -rf /tmp/external_svn_directory 

Il command RUN di Dockerfile viene sempre eseguito e memorizzato nella cache quando viene creata l'image del docker in modo che le variables necessarie per l'authentication di svn devono essere fornite al momento della creazione. È ansible spostare la chiamata svn export quando viene eseguita l' esecuzione del docker per evitare questo tipo di problemi. Per farlo è ansible creare uno script bash e dichiararlo come un punto di accesso docker e passare le variables di ambiente per username e password. Esempio

 # base image FROM ubuntu ENV REPOSITORY_URL http://subversion.myserver.com/path/to/directory # install subversion client RUN apt-get -y update && apt-get install -y subversion # make it executable before you add it here otherwise docker will coplain ADD docker-entrypoint.sh /enrypoint.sh ENTRYPOINT /entrypoint.sh 

docker-entrypoint.sh

 #!/bin/bash # maybe here some validation that variables $REPO_USER $REPO_PASSOWRD exists. svn export --username="$REMOTE_USER" --password="$REMOTE_PASSWORD" "$REPOSITORY_URL" # continue execution path/to/file.sh 

Esegui l'image:

 docker run -e REPO_USER=jane -e REPO_PASSWORD=secret your/image 

Oppure è ansible inserire le variables in un file:

.svn-credenziali

 REPO_USER=jane REPO_PASSWORD=secret 

Quindi eseguire:

 docker run --env-file .svn-credentials your/image 

Rimuovere il file .svn-credentials quando il tuo fatto.

Forse utilizzare SVN con SSH è una soluzione per te? Potresti generare una coppia di chiavi pubblica / privata. La chiave privata potrebbe essere aggiunta all'image mentre la chiave pubblica viene aggiunta al server.

Per maggiori dettagli potresti dare un'occhiata a questa domanda di stackoverflow .

Subversion memorizza i dettagli di authentication (se non è disabilitato nella configuration) sul lato client e utilizza la password username | stored on demand per le operazioni successive sullo stesso URL.

Quindi – devi eseguire (riuscito) svn esport in Dockerfile con username | password una sola volta e permettere a SVN di utilizzare le credenziali memorizzate nella cache (rimuovere le opzioni di authorization dalla row di command) più tardi