2015-07-26 1 views
3

Я пишу сценарий «автоматизированные Дженкинс машина создание» и я столкнулся с проблемой, с SSH учетных данными, а именно:Как автоматизировать создание/назначение учетных данных SSH jenkins?

в Дженкинс есть файл под названием credentials.xml/var/lib/jenkins), которые хранятся учетными данными для узлов и шахта выглядит как так:

<?xml version='1.0' encoding='UTF-8'?> 
<com.cloudbees.plugins.credentials.SystemCredentialsProvider plugin="[email protected]"> 
    <domainCredentialsMap class="hudson.util.CopyOnWriteMap$Hash"> 
    <entry> 
     <com.cloudbees.plugins.credentials.domains.Domain> 
     <specifications/> 
     </com.cloudbees.plugins.credentials.domains.Domain> 
     <java.util.concurrent.CopyOnWriteArrayList> 
     <com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl> 
      <scope>GLOBAL</scope> 
      <id>8743cc14-bc2c-44a6-b6bb-c121bef4ae2d</id> 
      <description>root_with_secret</description> 
      <username>root</username> 
      <password>2Xd4i7+8tjVXg2RHP6ggl/ZtWJp177ajXNajJxsj80o=</password> 
     </com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl> 
     </java.util.concurrent.CopyOnWriteArrayList> 
    </entry> 
    </domainCredentialsMap> 

Существует (есть) и узлы (подчиненные) конфигурационный файл (ы) (хранится в /var/lib/jenkins/nodes/HOSTNAME/config.xml для каждого ведомого устройства), которые выглядят (ы), как:

<?xml version='1.0' encoding='UTF-8'?> 
<slave> 
    <name>HOSTNAME_OF_MY_SECRET_MACHINE</name> 
    <description>HOSTNAME_OF_MY_SECRET_MACHINE</description> 
    <remoteFS>/root</remoteFS> 
    <numExecutors>1</numExecutors> 
    <mode>NORMAL</mode> 
    <retentionStrategy class="hudson.slaves.RetentionStrategy$Always"/> 
    <launcher class="hudson.plugins.sshslaves.SSHLauncher" plugin="[email protected]"> 
    <host>10.0.10.1</host> 
    <port>22</port> 
    <credentialsId>8743cc14-bc2c-44a6-b6bb-c121bef4ae2d</credentialsId> 
    <maxNumRetries>0</maxNumRetries> 
    <retryWaitTime>0</retryWaitTime> 
    </launcher> 
    <label></label> 
    <nodeProperties/> 
    <userId>anonymous</userId> 
</slave> 

Проблема в том, что после создания машины jenkins скопируйте credentials.xml и config.xml s для каждого подчиненного устройства, после чего учетные данные не будут работать. Я получаю

[07/26/15 16:00:39] [SSH] Opening SSH connection to 10.0.10.1:22. 
ERROR: Failed to authenticate as root. Wrong password. (credentialId:8743cc14-bc2c-44a6-b6bb-c121bef4ae2d/method:password) 
[07/26/15 16:00:41] [SSH] Authentication failed. 
hudson.AbortException: Authentication failed. 
    at hudson.plugins.sshslaves.SSHLauncher.openConnection(SSHLauncher.java:1178) 
    at hudson.plugins.sshslaves.SSHLauncher$2.call(SSHLauncher.java:701) 
    at hudson.plugins.sshslaves.SSHLauncher$2.call(SSHLauncher.java:696) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 
[07/26/15 16:00:41] Launch failed - cleaning up connection 
[07/26/15 16:00:41] [SSH] Connection closed. 

Чтобы решить эту проблему, я могу пойти в Jenkins ->Credentials ->, а затем обновить учетные данные с тем же паролем, который я хотел бы использовать в любом случае, и он будет работать.

Итак, вопрос заключается в том, использует ли jenkins вид соления/хеширования для каждой установки, так что credentials.xml не будет работать при копировании на новую машину?

ответ

6

Итак, мне удалось решить эту проблему с (я считаю) обходной путь-иш решение, а именно:

Чтобы сохранить пароль в виде простого текста в credentials.xml, скопируйте его в Дженкинс машину после установки и запуска оказание услуг. Затем Дженкинс шифрует его с его новой тайной (или что она использует для этой цели), и он будет работать :)

EDIT

Второй вариант заключается в установке Дженкинс, запустить его, а затем скопировать credentials.xml с зашифрованными паролями вместе с каталогом secrets и secret.xml с предыдущей инсталляции. Это скопирует как главный ключ шифрования, так и зашифрованные учетные данные, созданные с помощью этого главного ключа.

+0

Спасибо, хранение открытого текста в credentials.xml действительно отлично работает! Стоит отметить, что он * не * работает, чтобы хранить их в текстовом редакторе в xml-конфигурации самого задания (например, через FolderCredentialsProvider), поэтому, если вы это делаете, вам нужно будет преобразовать в систему и ссылку на систему учетные данные, которые сохраняются в credentials.xml. – mrooney

Смежные вопросы