概要
過去 にライブラリを使って Jenkins のジョブを操作しました
今回は net/http だけを使ってジョブを操作してみました
環境
- Ruby 2.5.5p157
テキストのパラメータを付与してビルドする
Jenkins のジョブは p1 というテキストのパラメータを受け取る想定です
post_form
を使うと簡単です
require 'net/http'
require 'uri'
require 'json'
data_p1 = 0...1
data_p1.each { |d|
build_parameter = {
"parameter" => [
{
"name" => "p1",
"value" => d
}
]
}
query = {
"json" => build_parameter.to_json
}
# ret = Net::HTTP.post_form(URI.parse('http://test:test@localhost:8080/job/test/build'), query)
ret = Net::HTTP.post_form(URI.parse('http://test:test@localhost:8080/job/test/buildWithParameters'), query)
puts ret.to_hash
}
/build
と /buildWithParameters
がありますが実行したビルド番号がほしい場合は buildWithParameters
を使います (参考)
ファイル付きのパラメータを付与してビルドする
Jenkins のジョブは f1 というファイルと p1 というテキストのパラメータを受け取る想定です
post_form
ではファイルを送れないようなので set_form
+ multipart/form-data
を使います
クエリの作り方もハッシュではなく 2 次元配列になるようです (もしかするとハッシュでもいけるかも)
require 'net/http'
require 'uri'
require 'json'
filename = 'test.txt'
f = open("./#{filename}")
data_p1 = 0...1
data_p1.each { |d|
build_parameter = {
"parameter" => [
{
"name" => "p1",
"value" => d
},
{
"name" => "f1",
"file" => filename
}
]
}
query = [
[ "json", build_parameter.to_json ],
[ filename, f, { filename: filename } ]
]
# url = URI.parse('http://localhost:8080/job/test/build')
url = URI.parse('http://localhost:8080/job/test/buildWithParameters')
http = Net::HTTP.new(url.host, url.port)
req = Net::HTTP::Post.new(url.path)
req.set_form(query, "multipart/form-data")
req.basic_auth('test', 'test')
ret = http.request(req)
puts ret.to_hash
}
リクエスト情報はあとから作成するため認証情報もあとから basic_auth
で設定しています
最後に
net/http だけを使って Jenkins のパラメータ付きビルドをコールしてみました
ビルドの結果なども使う想定であれば素直に jenkins_api_client を使うのが良いと思います
Jenkins の Remote API の仕組みや挙動を直接確認したい場合には良い方法かなと思います
0 件のコメント:
コメントを投稿