Я пишу сценарий «автоматизированные Дженкинс машина создание» и я столкнулся с проблемой, с 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
не будет работать при копировании на новую машину?
Спасибо, хранение открытого текста в credentials.xml действительно отлично работает! Стоит отметить, что он * не * работает, чтобы хранить их в текстовом редакторе в xml-конфигурации самого задания (например, через FolderCredentialsProvider), поэтому, если вы это делаете, вам нужно будет преобразовать в систему и ссылку на систему учетные данные, которые сохраняются в credentials.xml. – mrooney