Avez-vous déjà eu besoin de faire des requêtes HTTP dans votre pipeline Jenkins ? Comment feras-tu cela?
La première qui vient à l’esprit est d’utiliser la simple commande CURL. C’est un outil puissant, et il conviendra pour des cas simples comme la requête GET habituelle. Mais qu’en est-il des problèmes plus compliqués ? Que faire si vous avez besoin d’exécuter POST avec un énorme corps JSON et de nombreux en-têtes ? La commande CURL sera obscure et non maintenable. De plus, ce sera un enfer avec des guillemets et des symboles spéciaux pour que cela fonctionne dans le pipeline.
Lors de ma dernière interaction avec cet enfer, j’ai pensé à une alternative et j’ai trouvé cela – un plugin puissant, HTTP Request.
Pour utiliser le plugin de requête HTTP, vous devrez l’installer dans votre Jenkins. Cela peut être fait via le gestionnaire de plugins Jenkins, qui vous permet de parcourir et d’installer des plugins à partir de l’interface Jenkins. Une fois le plugin installé, vous pouvez l’utiliser dans des pipelines avec le mot-clé httpRequête.
Caractéristiques principales:
- Types de requête GET, HEAD, POST, PUT, PATCH, DELETE
- Code de réponse attendu ou contenu de la chaîne
- Authentification de base/formulaire
- Délai de connection dépassé
- Ajouter des en-têtes personnalisés
J’ai préparé quelques exemples pour comparer et contraster les deux approches. Ces exemples illustrent les principales différences entre l’exécution de requêtes HTTP dans le pipeline et montrent comment HTTP Request Plugin peut être mieux adapté à des situations spécifiques.
En examinant ces exemples, vous pouvez mieux comprendre les forces et les faiblesses de chaque outil et déterminer celui qui correspond le mieux à vos besoins.
OBTENIR la requête
BOUCLE
stage('Execute Request') {
steps {
script {
sh "curl https://dummyjson.com/products"
}
}
}
Brancher
stage('Execute Request') {
steps {
httpRequest "https://dummyjson.com/products"
}
}
En-têtes personnalisés
BOUCLE
stage('Execute Request') {
steps {
script {
sh "curl --location --request GET 'https://dummyjson.com/auth/products/1' \\\n" +
"--header 'Content-Type: application/json' \\\n" +
"--header 'Authorization: Bearer YOUR_TOKEN' \\\n" +
"--data-raw ''"
}
}
}
Brancher
stage('Execute Request') {
steps {
httpRequest customHeaders: [[name: 'Content-Type', value: 'application/json'],
[name: 'Authorization', value: 'Bearer YOUR_TOKEN']],
url: 'https://dummyjson.com/auth/products/1'
}
}
Requête POST avec charge utile complexe
BOUCLE
stage('Execute Request') {
steps {
script {
sh "curl --location --request POST 'https://dummyjson.com/carts/add' \\\n" +
"--header 'Content-Type: application/json' \\\n" +
"--data-raw '{\n" +
" \"userId\": \"1\",\n" +
" \"products\": [\n" +
" {\n" +
" \"id\": \"23\",\n" +
" \"quantity\": 5\n" +
" },\n" +
" {\n" +
" \"id\": \"45\",\n" +
" \"quantity\": 19\n" +
" }\n" +
" ]\n" +
"}'"
}
}
}
Brancher
stage('Execute Request') {
steps {
httpRequest contentType: 'APPLICATION_JSON',
httpMode: 'POST',
requestBody: '''{
"userId": "1",
"products": [
{"id": "23","quantity": 5},
{"id": "45","quantity": 19}
}''',
url: 'https://dummyjson.com/carts/add'
}
}
Code de réponse et validation du contenu
BOUCLE
stage('Execute Request') {
steps {
script {
def (String response, int code) = sh(script: "curl -s -w '\\n%{response_code}' https://dummyjson.com/products", returnStdout: true)
.trim()
.tokenize("\n")
if(code != "200") {
throw new Exception("Status code doesn't match. Received: $code" )
}
if(!response.contains("userId")){
throw new Exception("Very strange message\n" + response)
}
}
}
}
Brancher
stage('Execute Request') {
steps {
httpRequest url:"https://dummyjson.com/products",
validResponseCodes:'200',
validResponseContent:'userId'
}
}
La règle de validation ne pourra pas être créée avec les éléments suivants :
hudson.AbortException: Fail: Status code 500 is not in the accepted range: 200
hudson.AbortException: Fail: Response doesn't contain expected content 'userId'
Conclusion
HTTP Request Plugin est un outil précieux pour les utilisateurs de Jenkins. Il vous permet d’envoyer facilement des requêtes HTTP dans le cadre de vos travaux Jenkins, vous permettant d’automatiser les tâches et d’intégrer Jenkins à d’autres outils et services. L’interface conviviale du plug-in et les fonctionnalités supplémentaires de gestion des réponses le rendent facile à utiliser et puissant. Si vous cherchez à étendre les capacités de votre instance Jenkins et à rationaliser votre flux de travail, le plugin de requête HTTP Jenkins vaut vraiment la peine d’être envisagé.
N’hésitez pas à lire la documentation officielle et à visiter le référentiel GitHub.