jenkins의 작업 실행 결과를 ajax로 웹 스크래핑하여 xml 형식으로 가져 와서 나열해 봅시다.
소개
Jenkins 관리 콘솔, ,, 보기 힘들어요?
빌드 기록 번호로 성공이라고 말해도, 누가 어떤 매개 변수로 실행한 작업? 네요.
그래서 Jenkins의 빌드 정보를 웹 스크래핑으로 취득하고 일람 표시하고 싶습니다!
웹 스크래핑이라고 하면 Python과 Beautiful Soup의 조합이 주류인 것 같습니다만,
이전 기사와 마찬가지로 자바 스크립트와 기본 라이브러리 만 사용하여 해결할 수 없거나 시도한 곳,
어떻게든 되었기 때문에 메모를 남기고 싶습니다.
(웹 스크래핑주의 사항 htps : // 이 m/네즈q/있어 ms/c5에827에1827에7cb29011)
받는 사람과 요청 빈도는 계획적으로 ,,,,
과제 정리
첫째, Jenkins에서 정보를 얻을 수 없으면 이야기가되지 않습니다.
거기서 조사한 결과, API가 준비되어 있는 것을 알았습니다.
사용법도 간단하고, http 리퀘스트 메소드 온리로 취득 가능했습니다.
이번에는 작업의 실행 결과를 얻고 싶을 뿐이므로 get 메소드로 대응합니다.
우선 실행
어떤 데이터를 얻을 수 있는지 확인하기 위해,
google chrome에서 자신이 세운 jenkins에 다음 요청을 던져 보았습니다.
http://localhost:9090/api/json ?
※xml 형식으로 취득하고 싶은 경우는, json의 부분을 xml로 하는 것만으로 가능
{
"assignedLabels": [
{ }
],
"mode": "NORMAL",
"nodeDescription": "ノード",
"nodeName": "",
"numExecutors": 2,
"description": null,
"jobs":[
{
"name": "testJob",
"url": "http://<jenkins host>/job/testJob/",
"color": "blue"
},
{
"name": "hoge",
"url": "http://<jenkins host>/job/hoge/",
"color": "blue"
}
],
"overallLoad": { },
"primaryView":
{
"name": "All",
"url": "http://<jenkins host>/"
},
"quietingDown": false,
"slaveAgentPort": 0,
"unlabeledLoad": { },
"useCrumbs": false,
"useSecurity": false,
"views":[
{
"name": "All",
"url": "http://<jenkins host>/"
}
]
}
그래? 이 정도의 정보 밖에 취득할 수 없어,,,?
흠,,,
정보 수집,,
또한 조사를 진행한 곳,
쿼리 매개변수로 정보량을 조작할 수 있음을 확인했습니다.
· depth
'값을 늘리는 것으로, 보다 깊은 계층 정보를 취득할 수 있게 됩니다.
예를 들면 「1」이라고 지정하면, job 부하의 displayName(작업명칭이 들어가 있다)등을 취득할 수 있게 됩니다.
너무 큰 값을 입력하면 정보량이 늘어나지만, 그에 비례하여 시간이,,,
・tree
지정하는 것으로, 취득하는 요소명으로 필터링을 걸 수가 있습니다.
depth를 지정할 때는 정보량이 증가하므로, 이쪽도 지정하는 것을 추천합니다
덧붙여서입니다만, 동일 요소 명칭이 복수 존재하는 경우, 말에 「s」를 붙이는 사양인 것 같습니다.
job가 복수 있다→jobs
job 안의 displayName를 취하고 싶다→jobs[displayName]
※※쉼표로 단락하면 복수 지정이 가능하게 됩니다.
· xpath
"지정한 요소의 내용으로 필터링을 할 수 있습니다."
여러가지 있었지만, 자신이 요구하는 정보를 취득하기 위한 요구는 이하가 되었습니다.
http://localhost:9090/api/xml?depth=2&tree=jobs[displayName,builds[number,result,actions[parameters[name,value]],timestamp]]&xpath=//job[displayName='testJob' ]
다만, 취득해 알았습니다만, Jenkins의 타임 스탬프는 UNIX 타임 스탬프입니다.
얻은 값으로 다음 함수를 통해 친숙한 형식(yyyy/MM/dd)으로 변환합시다!
function convTimestamp(intTime) {
var date = new Date(intTime);
var year = date.getFullYear();
var month = ('0'+(date.getMonth()+1)).slice(-2);
var day = ('O'+date.getDate()).slice(-2);
var hour = ('0'+date.getHours()).slice(-2);
var min = ('O'+date.getMinutes()).slice(-2);
return(year + '/' + month + '/' day + ' ' + hour + ':' + min);
}
그건 그렇고, 잘못된 요청을 던지면,,,,
신사적인 이미지의 jenkins 마스코트 캐릭터 (이름 불명)가 메챠 화냅니다!
진지한 툴이라고 생각하고 있었습니다만, 엔지니어의 장난기가 들었습니다!
역시 일은 즐겁게하고 싶네요!
웹 스크래핑 목록
필요한 정보의 취득 방법을 확인할 수 있었으므로, ajax에 의한 web스크래핑을 실시해,
취득·가공해 일람 표시용의 htni 캐릭터 라인을 작성합시다!
이번에는, 이미지의 로드 등이 없는, 그리고, 빌드마다 일람을 하고 싶었으므로, 이하의 코드가 되었습니다.
// html読み込み完了後に呼び出すよう設定
$(document).ready(function(){
// 一覧表示
getList();
});
// 一覧表示
function getList(){
// 一覧取得
$.ajax({
type: "GET",
dataType: "xml",
url: "http://localhost:9090/api/xml?depth=2&tree=jobs[displayName,builds[number,result,actions[parameters[name,value]],timestamp]]&xpath=//job[displayNane='testJob']"
]).done(function (getData){
// build要素数分繰り返し処理を実施
$(getData).find("build").each(function(){
// 実行日時の変換・取得
convTimestamp(Number($(this).find("timestamp").text()));
// パラメータは深い階層に格納されているので、
// findを繰り返して取得する
$(this).find("action").each(function(){
$(this).find("parameter").each(function(){
if($.inArray($(this).find("name").text(), Unnecessary) == -1){
// naneとvalueの関係になっているので、以下のように取得し、
// 配列かhtml文字列作成用変数に格納していく
$(this).find("name").text(); //要素名
$(this).find("value").text(); //要素値
}
});
});
});
});
// html書き換え
// 挿入先のhtmlタグは、idを設定して記載しておく
$("#挿入先のid").html("先ほど作成したhtml文字列");
};
// 個人的にリフレッシュ処理を行いたくなったので
// 一定間隔で繰り返し処理を行う「setIntervalメソッド」を組み込み、
// そこからも呼び出すようにする
$(function(){
setInterval(function(){
getList();
}, 5000);
});
마지막으로
우선, 기본적인 라이브러리에서도 어떻게 되는가 알았습니다.
다음은 새로운 도구도 시도하고 싶습니다.
Reference
이 문제에 관하여(jenkins의 작업 실행 결과를 ajax로 웹 스크래핑하여 xml 형식으로 가져 와서 나열해 봅시다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Shohei_Ebisuno/items/ab4b3ea45b28888df26f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
첫째, Jenkins에서 정보를 얻을 수 없으면 이야기가되지 않습니다.
거기서 조사한 결과, API가 준비되어 있는 것을 알았습니다.
사용법도 간단하고, http 리퀘스트 메소드 온리로 취득 가능했습니다.
이번에는 작업의 실행 결과를 얻고 싶을 뿐이므로 get 메소드로 대응합니다.
우선 실행
어떤 데이터를 얻을 수 있는지 확인하기 위해,
google chrome에서 자신이 세운 jenkins에 다음 요청을 던져 보았습니다.
http://localhost:9090/api/json ?
※xml 형식으로 취득하고 싶은 경우는, json의 부분을 xml로 하는 것만으로 가능
{
"assignedLabels": [
{ }
],
"mode": "NORMAL",
"nodeDescription": "ノード",
"nodeName": "",
"numExecutors": 2,
"description": null,
"jobs":[
{
"name": "testJob",
"url": "http://<jenkins host>/job/testJob/",
"color": "blue"
},
{
"name": "hoge",
"url": "http://<jenkins host>/job/hoge/",
"color": "blue"
}
],
"overallLoad": { },
"primaryView":
{
"name": "All",
"url": "http://<jenkins host>/"
},
"quietingDown": false,
"slaveAgentPort": 0,
"unlabeledLoad": { },
"useCrumbs": false,
"useSecurity": false,
"views":[
{
"name": "All",
"url": "http://<jenkins host>/"
}
]
}
그래? 이 정도의 정보 밖에 취득할 수 없어,,,?
흠,,,
정보 수집,,
또한 조사를 진행한 곳,
쿼리 매개변수로 정보량을 조작할 수 있음을 확인했습니다.
· depth
'값을 늘리는 것으로, 보다 깊은 계층 정보를 취득할 수 있게 됩니다.
예를 들면 「1」이라고 지정하면, job 부하의 displayName(작업명칭이 들어가 있다)등을 취득할 수 있게 됩니다.
너무 큰 값을 입력하면 정보량이 늘어나지만, 그에 비례하여 시간이,,,
・tree
지정하는 것으로, 취득하는 요소명으로 필터링을 걸 수가 있습니다.
depth를 지정할 때는 정보량이 증가하므로, 이쪽도 지정하는 것을 추천합니다
덧붙여서입니다만, 동일 요소 명칭이 복수 존재하는 경우, 말에 「s」를 붙이는 사양인 것 같습니다.
job가 복수 있다→jobs
job 안의 displayName를 취하고 싶다→jobs[displayName]
※※쉼표로 단락하면 복수 지정이 가능하게 됩니다.
· xpath
"지정한 요소의 내용으로 필터링을 할 수 있습니다."
여러가지 있었지만, 자신이 요구하는 정보를 취득하기 위한 요구는 이하가 되었습니다.
http://localhost:9090/api/xml?depth=2&tree=jobs[displayName,builds[number,result,actions[parameters[name,value]],timestamp]]&xpath=//job[displayName='testJob' ]
다만, 취득해 알았습니다만, Jenkins의 타임 스탬프는 UNIX 타임 스탬프입니다.
얻은 값으로 다음 함수를 통해 친숙한 형식(yyyy/MM/dd)으로 변환합시다!
function convTimestamp(intTime) {
var date = new Date(intTime);
var year = date.getFullYear();
var month = ('0'+(date.getMonth()+1)).slice(-2);
var day = ('O'+date.getDate()).slice(-2);
var hour = ('0'+date.getHours()).slice(-2);
var min = ('O'+date.getMinutes()).slice(-2);
return(year + '/' + month + '/' day + ' ' + hour + ':' + min);
}
그건 그렇고, 잘못된 요청을 던지면,,,,
신사적인 이미지의 jenkins 마스코트 캐릭터 (이름 불명)가 메챠 화냅니다!
진지한 툴이라고 생각하고 있었습니다만, 엔지니어의 장난기가 들었습니다!
역시 일은 즐겁게하고 싶네요!
웹 스크래핑 목록
필요한 정보의 취득 방법을 확인할 수 있었으므로, ajax에 의한 web스크래핑을 실시해,
취득·가공해 일람 표시용의 htni 캐릭터 라인을 작성합시다!
이번에는, 이미지의 로드 등이 없는, 그리고, 빌드마다 일람을 하고 싶었으므로, 이하의 코드가 되었습니다.
// html読み込み完了後に呼び出すよう設定
$(document).ready(function(){
// 一覧表示
getList();
});
// 一覧表示
function getList(){
// 一覧取得
$.ajax({
type: "GET",
dataType: "xml",
url: "http://localhost:9090/api/xml?depth=2&tree=jobs[displayName,builds[number,result,actions[parameters[name,value]],timestamp]]&xpath=//job[displayNane='testJob']"
]).done(function (getData){
// build要素数分繰り返し処理を実施
$(getData).find("build").each(function(){
// 実行日時の変換・取得
convTimestamp(Number($(this).find("timestamp").text()));
// パラメータは深い階層に格納されているので、
// findを繰り返して取得する
$(this).find("action").each(function(){
$(this).find("parameter").each(function(){
if($.inArray($(this).find("name").text(), Unnecessary) == -1){
// naneとvalueの関係になっているので、以下のように取得し、
// 配列かhtml文字列作成用変数に格納していく
$(this).find("name").text(); //要素名
$(this).find("value").text(); //要素値
}
});
});
});
});
// html書き換え
// 挿入先のhtmlタグは、idを設定して記載しておく
$("#挿入先のid").html("先ほど作成したhtml文字列");
};
// 個人的にリフレッシュ処理を行いたくなったので
// 一定間隔で繰り返し処理を行う「setIntervalメソッド」を組み込み、
// そこからも呼び出すようにする
$(function(){
setInterval(function(){
getList();
}, 5000);
});
마지막으로
우선, 기본적인 라이브러리에서도 어떻게 되는가 알았습니다.
다음은 새로운 도구도 시도하고 싶습니다.
Reference
이 문제에 관하여(jenkins의 작업 실행 결과를 ajax로 웹 스크래핑하여 xml 형식으로 가져 와서 나열해 봅시다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Shohei_Ebisuno/items/ab4b3ea45b28888df26f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
{
"assignedLabels": [
{ }
],
"mode": "NORMAL",
"nodeDescription": "ノード",
"nodeName": "",
"numExecutors": 2,
"description": null,
"jobs":[
{
"name": "testJob",
"url": "http://<jenkins host>/job/testJob/",
"color": "blue"
},
{
"name": "hoge",
"url": "http://<jenkins host>/job/hoge/",
"color": "blue"
}
],
"overallLoad": { },
"primaryView":
{
"name": "All",
"url": "http://<jenkins host>/"
},
"quietingDown": false,
"slaveAgentPort": 0,
"unlabeledLoad": { },
"useCrumbs": false,
"useSecurity": false,
"views":[
{
"name": "All",
"url": "http://<jenkins host>/"
}
]
}
또한 조사를 진행한 곳,
쿼리 매개변수로 정보량을 조작할 수 있음을 확인했습니다.
· depth
'값을 늘리는 것으로, 보다 깊은 계층 정보를 취득할 수 있게 됩니다.
예를 들면 「1」이라고 지정하면, job 부하의 displayName(작업명칭이 들어가 있다)등을 취득할 수 있게 됩니다.
너무 큰 값을 입력하면 정보량이 늘어나지만, 그에 비례하여 시간이,,,
・tree
지정하는 것으로, 취득하는 요소명으로 필터링을 걸 수가 있습니다.
depth를 지정할 때는 정보량이 증가하므로, 이쪽도 지정하는 것을 추천합니다
덧붙여서입니다만, 동일 요소 명칭이 복수 존재하는 경우, 말에 「s」를 붙이는 사양인 것 같습니다.
job가 복수 있다→jobs
job 안의 displayName를 취하고 싶다→jobs[displayName]
※※쉼표로 단락하면 복수 지정이 가능하게 됩니다.
· xpath
"지정한 요소의 내용으로 필터링을 할 수 있습니다."
여러가지 있었지만, 자신이 요구하는 정보를 취득하기 위한 요구는 이하가 되었습니다.
http://localhost:9090/api/xml?depth=2&tree=jobs[displayName,builds[number,result,actions[parameters[name,value]],timestamp]]&xpath=//job[displayName='testJob' ]
다만, 취득해 알았습니다만, Jenkins의 타임 스탬프는 UNIX 타임 스탬프입니다.
얻은 값으로 다음 함수를 통해 친숙한 형식(yyyy/MM/dd)으로 변환합시다!
function convTimestamp(intTime) {
var date = new Date(intTime);
var year = date.getFullYear();
var month = ('0'+(date.getMonth()+1)).slice(-2);
var day = ('O'+date.getDate()).slice(-2);
var hour = ('0'+date.getHours()).slice(-2);
var min = ('O'+date.getMinutes()).slice(-2);
return(year + '/' + month + '/' day + ' ' + hour + ':' + min);
}
그건 그렇고, 잘못된 요청을 던지면,,,,
신사적인 이미지의 jenkins 마스코트 캐릭터 (이름 불명)가 메챠 화냅니다!
진지한 툴이라고 생각하고 있었습니다만, 엔지니어의 장난기가 들었습니다!
역시 일은 즐겁게하고 싶네요!
웹 스크래핑 목록
필요한 정보의 취득 방법을 확인할 수 있었으므로, ajax에 의한 web스크래핑을 실시해,
취득·가공해 일람 표시용의 htni 캐릭터 라인을 작성합시다!
이번에는, 이미지의 로드 등이 없는, 그리고, 빌드마다 일람을 하고 싶었으므로, 이하의 코드가 되었습니다.
// html読み込み完了後に呼び出すよう設定
$(document).ready(function(){
// 一覧表示
getList();
});
// 一覧表示
function getList(){
// 一覧取得
$.ajax({
type: "GET",
dataType: "xml",
url: "http://localhost:9090/api/xml?depth=2&tree=jobs[displayName,builds[number,result,actions[parameters[name,value]],timestamp]]&xpath=//job[displayNane='testJob']"
]).done(function (getData){
// build要素数分繰り返し処理を実施
$(getData).find("build").each(function(){
// 実行日時の変換・取得
convTimestamp(Number($(this).find("timestamp").text()));
// パラメータは深い階層に格納されているので、
// findを繰り返して取得する
$(this).find("action").each(function(){
$(this).find("parameter").each(function(){
if($.inArray($(this).find("name").text(), Unnecessary) == -1){
// naneとvalueの関係になっているので、以下のように取得し、
// 配列かhtml文字列作成用変数に格納していく
$(this).find("name").text(); //要素名
$(this).find("value").text(); //要素値
}
});
});
});
});
// html書き換え
// 挿入先のhtmlタグは、idを設定して記載しておく
$("#挿入先のid").html("先ほど作成したhtml文字列");
};
// 個人的にリフレッシュ処理を行いたくなったので
// 一定間隔で繰り返し処理を行う「setIntervalメソッド」を組み込み、
// そこからも呼び出すようにする
$(function(){
setInterval(function(){
getList();
}, 5000);
});
마지막으로
우선, 기본적인 라이브러리에서도 어떻게 되는가 알았습니다.
다음은 새로운 도구도 시도하고 싶습니다.
Reference
이 문제에 관하여(jenkins의 작업 실행 결과를 ajax로 웹 스크래핑하여 xml 형식으로 가져 와서 나열해 봅시다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Shohei_Ebisuno/items/ab4b3ea45b28888df26f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
// html読み込み完了後に呼び出すよう設定
$(document).ready(function(){
// 一覧表示
getList();
});
// 一覧表示
function getList(){
// 一覧取得
$.ajax({
type: "GET",
dataType: "xml",
url: "http://localhost:9090/api/xml?depth=2&tree=jobs[displayName,builds[number,result,actions[parameters[name,value]],timestamp]]&xpath=//job[displayNane='testJob']"
]).done(function (getData){
// build要素数分繰り返し処理を実施
$(getData).find("build").each(function(){
// 実行日時の変換・取得
convTimestamp(Number($(this).find("timestamp").text()));
// パラメータは深い階層に格納されているので、
// findを繰り返して取得する
$(this).find("action").each(function(){
$(this).find("parameter").each(function(){
if($.inArray($(this).find("name").text(), Unnecessary) == -1){
// naneとvalueの関係になっているので、以下のように取得し、
// 配列かhtml文字列作成用変数に格納していく
$(this).find("name").text(); //要素名
$(this).find("value").text(); //要素値
}
});
});
});
});
// html書き換え
// 挿入先のhtmlタグは、idを設定して記載しておく
$("#挿入先のid").html("先ほど作成したhtml文字列");
};
// 個人的にリフレッシュ処理を行いたくなったので
// 一定間隔で繰り返し処理を行う「setIntervalメソッド」を組み込み、
// そこからも呼び出すようにする
$(function(){
setInterval(function(){
getList();
}, 5000);
});
우선, 기본적인 라이브러리에서도 어떻게 되는가 알았습니다.
다음은 새로운 도구도 시도하고 싶습니다.
Reference
이 문제에 관하여(jenkins의 작업 실행 결과를 ajax로 웹 스크래핑하여 xml 형식으로 가져 와서 나열해 봅시다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Shohei_Ebisuno/items/ab4b3ea45b28888df26f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)