2012-05-22 5 views
43

Ho uno script che elimina e ricrea i lavori tramite le chiamate HTTP di curl e voglio eliminare qualsiasi "username: password" codificato. E.g. curl -X POST $url --user username:passwordIn che modo i dettagli dell'autenticazione utente Jenkins possono essere "passati" a uno script che utilizza l'API Jenkins per creare lavori?

Considerazioni:

  • Jenkins CLI (probabilmente non un'opzione). Uno dovrebbe essere in grado di ottenere lo stesso con la CLI come con l'API Jenkins (creazione di lavori ecc.) Ma per quanto ho capito Jenkins CLI non è una buona alternativa per me poiché i lavori creati con appariranno in Jenkins solo dopo il riavvio o un " Ricarica la configurazione dal disco ", e ciò annullerebbe qualsiasi altro lavoro in esecuzione.

  • Token API. Non riesco a trovare il modo di ottenere l'utente token e poi passarlo come parametro allo script, ma che può essere una soluzione ..

+0

meglio aggiungere che linguaggio di script preferisci –

risposta

6
  • Con Jenkins CLI non devi ricaricare tutto - è possibile caricare il lavoro (update-job). Non è possibile utilizzare token con CLI, AFAIK: è necessario utilizzare password o file di password.

  • Il nome del token per l'utente può essere ottenuto tramite http://<jenkins-server>/user/<username>/configure - premere il pulsante "Mostra token API".

  • Ecco uno link on how to use API tokens (utilizza wget, ma curl è molto simile).

+0

Grazie, Sapendo che CLI avrebbe lavorare senza ricollegare il conf dal disco è buono, ma poi dovrei creare un nuovo script. L'uso del token sarebbe meglio penso, ma non vedo dall'esempio sulla pagina collegata come potrei passare il topi-token per l'utente alla variabile TOKEN in per esempio '... ob/build? token = TOKEN' – HenrikSN

+0

Non sono sicuro di cosa stai chiedendo. Sarà [questo aiuto] (https://wiki.jenkins-ci.org/display/JENKINS/Remote+access+API)? (Consulta la sezione * Invio di lavori *). –

+2

Come amministratore, come posso ottenere un token API per un utente diverso da me stesso, senza accedere come loro? Quando visito la pagina che citi, tutto quello che vedo è che "Token è nascosto". –

61

provare in questo modo: (per esempio eliminare il lavoro)

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

l'API-token può essere ottenuto da http://<jenkins-server>/user/<username>/configure.

+3

Come amministratore, come posso ottenere un token API per un utente diverso da me stesso, senza accedere come loro? Quando visito la pagina che citi, tutto quello che vedo è che "Token è nascosto". –

2

Se si desidera scrivere uno script per automatizzare la creazione di lavori utilizzando l'API Jenkins, è possibile utilizzare uno dei client API per farlo. Un client rubino per Jenkins è disponibile presso 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 

L'API client può essere utilizzata per eseguire un sacco di operazioni.

6

avevo bisogno di aggiungere in modo esplicito POST nel comando CURL:

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

Ho anche installato il SafeRestart Plugin, nel caso questo faccia la differenza.

12

questo ha lavorato per me:

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

API token può essere ottenuta dalla configurazione utente Jenkins.

+4

Come amministratore, come ottengo un token API per un utente diverso da me stesso, senza accedere come loro? Quando visito la configurazione utente di Jenkins, tutto quello che vedo è che "Token è nascosto". –

+2

Sto utilizzando Active Directory per l'autenticazione e non sembra consentirmi di accedere come utenti locali per vedere il token. – TekiusFanatikus

+1

Anche questo non funziona con l'autenticazione di Google. –

0

Per utilizzare i token API, gli utenti dovranno ottenere i propri token, ciascuno da https://<jenkins-server>/me/configure o https://<jenkins-server>/user/<user-name>/configure. Spetta a te, come autore dello script, determinare come gli utenti forniscono il token allo script. Per esempio, in uno script Bourne shell in esecuzione in modo interattivo all'interno di un repository Git, dove .gitignore contiene /.jenkins_api_token, si potrebbe fare qualcosa di simile:

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 
Problemi correlati