Я готовлю проект с Дженкинсом в Docker контейнере.
После долгих исследований я не нашел решения, как добавить нового пользователя Jenkins с Ansible или cURL. Есть некоторые предложения (https://linuxacademy.com/community/show/5636-how-to-secure-and-create-users-in-jenkins-using-ansible-playbooks/), но в контейнере Jenkins его вообще нельзя было использовать
Так что я немного реверс-инжиниринг (проверяю запрос в Chrome, сделаю трассировку) Я думаю, что это можно сделать с помощью модуля Ansible uri, так же, как и добавление новых учетных данных (https://getintodevops.com/blog/how-to-add-jenkins-credentials-with-curl-or-ansible)
Вот код результата. Так как он находится во время начальной настройки, для него требуется токен администратора по умолчанию.
path_to_jenkins-home_at_docker_host - это каталог на хосте Docker, который будет смонтирован как дом Дженкинса в контейнере (-v / path_to_jenkins-home_at_docker_host: / var / jenkins_home)
с cURL:
USERNAME="admin"
PASSTOKEN="[content_of_/path_to_jenkins-home_at_docker_host/secrets/initialAdminPassword]"
SERVER="[jenkins_host]"
SRVPORT="8088"
COOKIEJAR=$(mktemp)
AUTH=${USERNAME}:${PASSTOKEN}
APIADDR=${SERVER}:${SRVPORT}
CRUMB=$(curl -u "${AUTH}" --cookie-jar "$COOKIEJAR" "http://${APIADDR}/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,%22:%22,//crumb)")
curl -v -u "${AUTH}" --cookie "$COOKIEJAR" -H "$CRUMB" "http://${APIADDR}"/securityRealm/createAccountByAdmin \
--data 'username=user2&password1=pass&password2=pass&fullname=fullname&email=bubba%40dummy.bg'
с Ansible:
- name: JENKINS-PASSTOKEN | Get initial authentication token
shell: 'cat /path_to_jenkins-home_at_docker_host/secrets/initialAdminPassword'
register: admin_auth_token
- name: JENKINS-CTEDENTIALS | Create CRUMB authentication request
uri:
url: 'http://localhost:{{ jenkins_port }}/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)'
user: admin
password: '{{ admin_auth_token.stdout }}'
force_basic_auth: yes
return_content: yes
register: crumb
- name: JENKINS-CTEDENTIALS | Add Jenkins administration account
uri:
method: POST
url: 'http://localhost:{{ jenkins_port }}/securityRealm/createAccountByAdmin'
user: admin
password: '{{ admin_auth_token.stdout }}'
force_basic_auth: yes
follow_redirects: all
headers:
Jenkins-Crumb: '{{ crumb.content.split(":")[1] }}'
Cookie: '{{ crumb.set_cookie }}'
# body: 'username=user2&password1=pass&password2=pass&fullname=fullname&email=bubba%40dummy.bg'
body: 'username={{ jenkins_user }}&password1={{ jenkins_pass }}&password2={{ jenkins_pass }}&fullname={{ jenkins_fullname }}&email={{ jenkins_email }}'