Jenkins : Utilizando a API para builds remotos

Neste post será apresentado como utilizar a api do Jenkins para ações remotas sem a necessidade de executar diretamente no console web ou necessidade de integração com algum sistema.

 

A api do Jenkins fornece as seguintes opções de uso :

 

XML
JSON com suporte JSONP
Python

 

Documentação :

https://wiki.jenkins.io/display/JENKINS/Remote+access+API

 

 

 

1) Ambiente :

10.0.0.90 – devops-01 – Jenkins Server

 

 

2) Verificando o token do usuário :

 

Acesse http://JENKINS SERVER/user/jenkins/configure

 

 

 

 

 

 

3) Verificando o Crumb  :

Por padrão o Jenkins tem proteção CSRF habilitada para previnir ataques “one-click“.

 

Para pegarmos o crumb precisamos executar o comando abaixo para incluirmos na nossa requisição .

 


wget -q --auth-no-challenge \

--user jenkins --password jenkins \

--output-document - 'http://JENKINS SERVER:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)'

 

 

 

4) Executando a api remotamente via Curl :

 

Build sem parâmetros

 

curl -X POST http://API USER_ID:API TOKEN@JENKINS SERVER/job/JOB_NAME/build -H “Jenkins-Crumb:CRUMB”

 

 
curl -v -X POST http://jenkins:8ab5686e09b5d8e62adb22d1a1cb7526@jenkins.fajlinux.lab:8080/job/Lab%20Ansible/build -H "Jenkins-Crumb:89a5303104c1e02eb8ab5e5ad7f22dbf"

 

 

Build com parâmetros

 

curl -X POST http://API USER_ID:API TOKEN@JENKINS SERVER/job/JOB_NAME/build -H “Jenkins-Crumb:CRUMB” –data-urlencode json='{“parameter”: [{“name”:”VAR1″, “value”:”123″},{“name”:”VAR2″, “value”:”456″}]}’

 

 
 curl -v  -X POST http://jenkins:8ab5686e09b5d8e62adb22d1a1cb7526@jenkins.fajlinux.lab:8080/job/Lab%20API/build \
-H "Jenkins-Crumb:89a5303104c1e02eb8ab5e5ad7f22dbf" \
 --data-urlencode json='{"parameter": [{"name":"VAR1", "value":"123"},{"name":"VAR2", "value":"456"}]}'

 

 

 

Referências

https://wiki.jenkins.io/display/JENKINS/Remote+access+API#RemoteaccessAPI-CSRFProtection