Ответ 1
Попробуйте этот способ: (например, удалите задание)
curl --silent --show-error http://<username>:<api-token>@<jenkins-server>/job/<job-name>/doDelete
Апи-токен можно получить из http://<jenkins-server>/user/<username>/configure
.
У меня есть script, который удаляет и повторно создает задания через завитые HTTP-вызовы, и я хочу избавиться от любого жестко заданного "имени пользователя: пароль".
Например. curl -X POST $url --user username:password
Вопросы:
CLI Jenkins (возможно, не вариант). Нужно иметь то же самое с CLI, что и с Jenkins API (создание заданий и т.д.), Но насколько я понимаю, CLI Jenkins не является хорошей альтернативой для меня, поскольку созданные задания будут появляться только в Jenkins после перезапуска или "перезагрузить" Конфигурация с диска ", и это приведет к отмене любых других рабочих заданий.
API-маркер. Не удается узнать, как получить токен пользователя, а затем передать его как параметр для script, но это может быть решение.
Попробуйте этот способ: (например, удалите задание)
curl --silent --show-error http://<username>:<api-token>@<jenkins-server>/job/<job-name>/doDelete
Апи-токен можно получить из http://<jenkins-server>/user/<username>/configure
.
Это сработало для меня:
curl -u $username:$api_token -FSubmit=Build 'http://<jenkins-server>/job/<job-name>/buildWithParameteres?environment='
Маркер API может быть получен из пользовательской конфигурации Jenkins.
С CLI Jenkins вам не нужно перезагружать все - вы можете загрузить задание (команда update-job). Вы не можете использовать токены с CLI, AFAIK - вам нужно использовать пароль или файл паролей.
Имя токена для пользователя можно получить через http://<jenkins-server>/user/<username>/configure
- нажать кнопку "Показать API-маркер".
Здесь ссылка о том, как использовать маркеры API (она использует wget
, но curl
очень похожа).
Мне нужно было явно добавить POST в команду CURL:
curl -X POST http://<user>:<token>@<server>/safeRestart
У меня также есть плагин SafeRestart, если это имеет значение.
Если вы хотите написать script для автоматизации создания заданий с помощью Jenkins API, вы можете использовать один из клиентов API для этого. Рубиновый клиент для Jenkins доступен по адресу https://github.com/arangamani/jenkins_api_client
gem install jenkins_api_client
require "rubygems"
require "jenkins_api_client"
# Initialize the client by passing in the server information
# and credentials to communicate with the server
client = JenkinsApi::Client.new(
:server_ip => "127.0.0.1",
:username => "awesomeuser",
:password => "awesomepassword"
)
# The following block will create 10 jobs in Jenkins
# test_job_0, test_job_1, test_job_2, ...
10.times do |num|
client.job.create_freestyle(:name => "test_job_#{num}")
end
# The jobs in Jenkins can be listed using
client.job.list_all
Клиент API может использоваться для выполнения большого количества операций.
API-токен совпадает с паролем с точки зрения API, см. исходный код использует токен вместо паролей для API.
См. соответствующий ответ от @coffeebreaks в моем вопросе python-jenkins или jenkinsapi для API удаленного доступа jenkins в python
Другие описаны в doc для использования http базовой модели аутентификации
Чтобы использовать маркеры API, пользователям необходимо будет получить свои собственные токены, каждый из которых находится от https://<jenkins-server>/me/configure
или https://<jenkins-server>/user/<user-name>/configure
. Вы, как автор script, должны определить, как пользователи подают токен на script. Например, в оболочке Bourne script, выполняющейся интерактивно внутри репозитория Git, где .gitignore
содержит /.jenkins_api_token
, вы можете сделать что-то вроде:
api_token_file="$(git rev-parse --show-cdup).jenkins_api_token"
api_token=$(cat "$api_token_file" || true)
if [ -z "$api_token" ]; then
echo
echo "Obtain your API token from $JENKINS_URL/user/$user/configure"
echo "After entering here, it will be saved in $api_token_file; keep it safe!"
read -p "Enter your Jenkins API token: " api_token
echo $api_token > "$api_token_file"
fi
curl -u $user:$api_token $JENKINS_URL/someCommand