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