web-dev-qa-db-fra.com

Comment des informations d'authentification d'utilisateur Jenkins peuvent-elles être "transmises" à un script utilisant l'API Jenkins pour créer des travaux?

J'ai un script qui supprime et recrée des travaux via des appels HTTP curl et je souhaite supprimer tout "nom d'utilisateur: mot de passe" codé en dur ". E.g. curl -X POST $url --user username:password

Considérations:

  • Jenkins CLI (probablement pas une option). On devrait pouvoir obtenir la même chose avec la CLI qu'avec l’API Jenkins (création d’emplois, etc.), mais, à ma connaissance, la CLI de Jenkins n’est pas une bonne alternative pour moi, car les emplois créés avec ne seront affichés dans Jenkins qu'après le redémarrage ou "Recharger la configuration à partir du disque", ce qui annulerait tout autre travail en cours d'exécution.

  • Jeton API . Impossible de trouver comment obtenir le jeton utilisateur, puis le transmettre. Un paramètre du script, mais cela peut être une solution.

53
HenrikSN

Essayez de cette façon: (par exemple, supprimez le travail)

curl --silent --show-error http://<username>:<api-token>@<jenkins-server>/job/<job-name>/doDelete

L'api-token peut être obtenu à partir de http://<jenkins-server>/user/<username>/configure.

71
PiotrO

Cela a fonctionné pour moi:

curl -u $username:$api_token -FSubmit=Build 'http://<jenkins-server>/job/<job-name>/buildWithParameters?environment='

Le jeton API peut être obtenu à partir de la configuration utilisateur Jenkins.

16
Deepti

J'avais besoin d'ajouter explicitement POST dans la commande CURL:

curl -X POST http://<user>:<token>@<server>/safeRestart

J'ai aussi le plugin SafeRestart installé, au cas où cela ferait une différence.

7
lindon fox
  • Avec Jenkins CLI, vous n'avez pas à tout recharger, vous pouvez simplement charger le travail (commande update-job). Vous ne pouvez pas utiliser de jetons avec CLI, AFAIK - vous devez utiliser un mot de passe ou un fichier de mot de passe.

  • Le nom du jeton pour l'utilisateur peut être obtenu via http://<jenkins-server>/user/<username>/configure - Appuyez sur le bouton 'Afficher le jeton de l'API'.

  • Voici un lien sur la façon d'utiliser les jetons d'API (il utilise wget, mais curl est très similaire).

6
malenkiy_scot

Si vous souhaitez écrire un script pour automatiser la création de travaux à l'aide de l'API Jenkins, vous pouvez utiliser l'un des clients API pour le faire. Un client Ruby pour Jenkins est disponible à 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

Le client API peut être utilisé pour effectuer de nombreuses opérations.

2
arangamani

Le jeton de l'API est identique au mot de passe du point de vue de l'API, voir code source utilise le jeton à la place des mots de passe pour l'API .

Voir la réponse correspondante de @coffeebreaks dans ma question python-jenkins ou jenkinsapi pour l'API d'accès distant jenkins en python

Autres est décrit dans la doc pour utiliser le modèle d'authentification de base http

1
Larry Cai

Pour utiliser les jetons d'API, les utilisateurs devront obtenir leurs propres jetons, chacun à partir de https://<jenkins-server>/me/configure ou https://<jenkins-server>/user/<user-name>/configure. C'est à vous, en tant qu'auteur du script, de déterminer comment les utilisateurs lui fournissent le jeton. Par exemple, dans un script Bourne Shell s'exécutant de manière interactive dans un référentiel Git, où .gitignore contient /.jenkins_api_token, vous pouvez effectuer les opérations suivantes:

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
0
Amir