Я хочу создать учетные данные jenkins через ansible

90
13

Я собираю машину-разработчик, используя незаменимую. В этой машине я устанавливаю jenkins.


Я создал задания для jenkins с возможностью:


- shell: "java -jar {{ jenkins.cli_jar }} -s {{ jenkins.server }} create-job \
{{ item.name }} < {{ jenkins.jobs_dir }}/{{ item.xml_file }}"
with_items: "jenkins.jobs"

И установил плагины через cli и т.д.


Но теперь мне не хватает учетных данных ssh для заданий; Я просто хочу получить учетные данные ssh с пользователем "jenkins" и использует "From the Jenkins master ~/.ssh".


Этот тип учетных данных - это те, о которых я говорю:


enter image description here


Возможно, это groovy script, но я не нашел много информации об этом. Спасибо за помощь.

спросил(а) 2021-01-25T13:47:14+03:00 4 месяца, 3 недели назад
1
Решение
116

Вы можете использовать клиента jenkins из командной строки на машине, где работают jenkins:


java -jar jenkins-cli.jar -s http://localhost:8080/ groovy create-credential.groovy

с create-credential.groovy:

import jenkins.model.*
import com.cloudbees.plugins.credentials.CredentialsScope
import com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl

def addPassword = { username, new_password ->
def creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials(
com.cloudbees.plugins.credentials.common.StandardUsernameCredentials.class,
Jenkins.instance
)

def c = creds.findResult { it.username == username ? it : null }

if ( c ) {
println "found credential ${c.id} for username ${c.username}"
} else {
def credentials_store = Jenkins.instance.getExtensionList(
'com.cloudbees.plugins.credentials.SystemCredentialsProvider'
)[0].getStore()

def scope = CredentialsScope.GLOBAL

def description = ""

def result = credentials_store.addCredentials(
com.cloudbees.plugins.credentials.domains.Domain.global(),
new UsernamePasswordCredentialsImpl(scope, null, description, username, new_password)
)

if (result) {
println "credential added for ${username}"
} else {
println "failed to add credential for ${username}"
}
}
}

addPassword('pinky', 'narf')


Это добавит глобальные учетные данные для пользователя "pinky" с паролем "narf"

ответил(а) 2021-01-25T13:47:14+03:00 4 месяца, 3 недели назад
63

Плагин учетных данных Jenkins не позволяет создавать учетные данные с использованием API (https://issues.jenkins-ci.org/browse/JENKINS-28407).


Жизнеспособным решением будет запись создания учетных данных с использованием предпочтительного браузера и прокси-сервера JMeter или Selenium IDE. и повторное воспроизведение с использованием JMeter CLI или сохранение зарегистрированного теста Selenium как groovy script.

Вы также можете взглянуть на https://github.com/jenkinsci/credentials-plugin/pull/33

ответил(а) 2021-01-25T13:47:14+03:00 4 месяца, 3 недели назад
46

Начиная с версии 2.1.1 плагина (июнь 2016 года) это возможно через CLI или REST API:


https://github.com/jenkinsci/credentials-plugin/blob/master/docs/user.adoc#creating-a-credentials


с этой страницы:

$ cat > credential.xml <<EOF
<com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl>
<scope>GLOBAL</scope>
<id>deploy-key</id>
<username>wecoyote</username>
<password>secret123</password>
</com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl>
EOF
$ curl -X POST -H content-type:application/xml -d @credential.xml \
https://jenkins.example.com/job/example-folder/credentials/store/folder/\
domain/testing/createCredentials

ответил(а) 2021-01-25T13:47:14+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема