webentwicklung-frage-antwort-db.com.de

Wie können Jenkins-Benutzerauthentifizierungsdetails an ein Skript "übergeben" werden, das die Jenkins-API zum Erstellen von Jobs verwendet?

Ich habe ein Skript, das Jobs durch Curl-HTTP-Aufrufe löscht und neu erstellt, und ich möchte hartcodierte "Benutzername: Kennwort" . E.g. curl -X POST $url --user username:password

Überlegungen:

  • Jenkins CLI (wahrscheinlich keine Option). Man sollte in der Lage sein, mit der CLI dasselbe zu erreichen wie mit der Jenkins-API (Erstellen von Jobs usw.), aber soweit ich die Jenkins-CLI verstehe, ist dies keine gute Alternative für mich, da Jobs, die mit erstellt werden, erst nach dem Neustart oder in Jenkins erscheinen eine "Konfiguration von Datenträger neu laden", und dies würde alle anderen laufenden Jobs abbrechen.

  • API-Token . Ich kann nicht herausfinden, wie man das Benutzertoken erhält und es dann als Parameter an das Skript weitergibt. Dies kann jedoch eine Lösung sein.

53
HenrikSN

Versuchen Sie es folgendermaßen: (zum Beispiel den Job löschen)

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

Das API-Token kann von http://<jenkins-server>/user/<username>/configure bezogen werden.

71
PiotrO

Das hat für mich funktioniert:

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

Das API-Token kann von der Jenkins-Benutzerkonfiguration abgerufen werden.

16
Deepti

Ich musste explizit POST im CURL-Befehl hinzufügen:

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

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

7
lindon fox
  • Mit Jenkins CLI müssen Sie nicht alles neu laden - Sie können den Job einfach laden (Befehl update-job). Sie können keine Token mit CLI oder AFAIK verwenden - Sie müssen das Kennwort oder die Kennwortdatei verwenden.

  • Der Token-Name für den Benutzer kann über http://<jenkins-server>/user/<username>/configure abgerufen werden.

  • Hier ein Link zur Verwendung von API-Token (er verwendet wget, aber curl ist sehr ähnlich).

6
malenkiy_scot

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

Mit dem API-Client können viele Vorgänge ausgeführt werden.

2
arangamani

Das API-Token ist aus API-Sicht das gleiche wie das Kennwort, siehe Quellcode Verwendet das Token anstelle der Kennwörter für die API .

Siehe verwandte Antwort von @coffeebreaks in meiner Frage Python-Jenkins oder Jenkinsapi für Jenkins-Fernzugriffs-API in Python

Andere werden in doc beschrieben, um das Basisauthentifizierungsmodell http zu verwenden

1
Larry Cai

Um API-Token verwenden zu können, müssen Benutzer eigene Token erwerben, die jeweils von https://<jenkins-server>/me/configure oder https://<jenkins-server>/user/<user-name>/configure stammen. Es liegt an Ihnen, als Autor des Skripts festzulegen, wie Benutzer das Skript dem Skript zur Verfügung stellen. In einem Bourne-Shell-Skript, das interaktiv in einem Git-Repository ausgeführt wird und .gitignore/.jenkins_api_token enthält, können Sie beispielsweise Folgendes tun:

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