2012-05-22 6 views
43

Ich habe ein Skript, das Jobs löscht und neu erstellt, durch curl HTTP-Aufrufe und ich möchte alle fest codierten "username: password" loswerden. Zum Beispiel curl -X POST $url --user username:passwordWie können Jenkins-Benutzerauthentifizierungsdetails an ein Skript "übergeben" werden, das die Jenkins-API verwendet, um Jobs zu erstellen?

Überlegungen:

  • Jenkins CLI (wahrscheinlich keine Option). Man sollte dasselbe mit der CLI erreichen können wie mit der Jenkins API (Erstellen von Jobs etc.), aber soweit ich weiß, ist Jenkins CLI keine gute Alternative für mich, da Jobs, die mit erstellt wurden, erst nach einem Neustart in Jenkins erscheinen. Reload Configuration from Disk ", und das würde alle anderen laufenden Jobs abbrechen.

  • API-Token. Kann nicht herausfinden, wie die Benutzer-Token zu erhalten und es dann als Parameter an das Skript übergeben, aber das kann eine Lösung sein ..

+0

besser hinzuzufügen, die Skriptsprache bevorzugen Sie –

Antwort

6
  • Mit Jenkins CLI Sie müssen nicht neu geladen alles - Sie können nur den Job laden (update-job Befehl). Sie können Tokens nicht mit CLI, AFAIK verwenden - Sie müssen ein Passwort oder eine Passwortdatei verwenden.

  • Token-Name für Benutzer kann über http://<jenkins-server>/user/<username>/configure abgerufen werden - drücken Sie auf "Show API Token" -Taste.

  • Hier ist ein link on how to use API tokens (es verwendet wget, aber curl ist sehr ähnlich).

+0

Danke, Wissen dass CLI würde Arbeit ohne Refload conf von der Festplatte ist gut, aber dann müsste ich ein neues Skript machen. Die Verwendung von Token wäre besser, denke ich, aber ich sehe nicht von Beispiel auf der verknüpften Seite, wie ich das API-Token für den Benutzer an die Variable TOKEN in zum Beispiel übergeben könnte? ... ob/build? Token = TOKEN' – HenrikSN

+0

Ich bin mir nicht sicher, was Sie fragen. Will [diese Hilfe] (https://wiki.jenkins-ci.org/display/JENKINS/Remote+access+API)? (Schauen Sie in den Abschnitt * Submission Jobs *). –

+2

Wie erhalte ich als Administrator ein API-Token für einen anderen Benutzer als mich, ohne mich als Benutzer anzumelden? Wenn ich die von Ihnen zitierte Seite besuche, sehe ich nur, dass "Token versteckt ist". –

61

auf diese Weise versuchen: (zum Beispiel den Auftrag löschen) können

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

Die api-Token von http://<jenkins-server>/user/<username>/configure erhalten werden.

+3

Wie kann ich als Administrator ein API-Token für einen anderen Benutzer als mich erhalten, ohne sich als Benutzer anzumelden? Wenn ich die von Ihnen zitierte Seite besuche, sehe ich nur, dass "Token versteckt ist". –

2

Wenn Sie ein Skript schreiben möchten, um die Erstellung von Jobs mithilfe der Jenkins-API zu automatisieren, können Sie einen der API-Clients dazu verwenden. Ein Rubin Client für Jenkins verfügbar ist kann eine Menge von Operationen auszuführen bei 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 

Das API-Client verwendet werden.

6

ich ausdrücklich erforderlich verwenden, um POST in dem Curl-Befehl hinzufügen:

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

Ich habe auch die SafeRestart Plugin installiert, falls das einen Unterschied macht.

12

Dieser arbeitete für mich:

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

API-Token von Jenkins Benutzerkonfiguration erhalten werden kann.

+4

Wie erhalte ich als Administrator ein API-Token für einen anderen Benutzer als mich, ohne mich als Benutzer anzumelden? Wenn ich die Jenkins-Benutzerkonfiguration besuche, sehe ich nur, dass "Token versteckt ist". –

+2

Ich verwende Active Directory zur Authentifizierung und es scheint nicht, dass ich mich als lokaler Benutzer anmelden kann, um das Token zu sehen. – TekiusFanatikus

+1

Dies funktioniert auch nicht mit der Google-Authentifizierung. –

0

Um API-Token zu verwenden, müssen Benutzer ihre eigenen Token erhalten, jeweils unter https://<jenkins-server>/me/configure oder https://<jenkins-server>/user/<user-name>/configure. Es liegt an Ihnen als Autor des Skripts, festzulegen, wie Benutzer das Token an das Skript übergeben. Zum Beispiel in einem Skript Bourne Shell interaktiv in einem Git-Repository ausgeführt wird, wo .gitignore/.jenkins_api_token enthält, könnte tun Sie so etwas wie:

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