GitLab webhook에서 jenkis 빌드
소개
프로젝트 운영으로 자산을 만들 때 jenkins로 빌드하고 있습니다.
이미지 등 git에 push하고 jenkins의 매개 변수를 설정하고 포치
이것만이지만,이 작업을 수행하는 데 매일 상당한 횟수가 있습니다.
무슨 에셋을 줄 것인가?
수수하게 귀찮은
하고 싶은 일
git에 push하면 마음대로 jenkis 빌드하고 싶다
예)
test.png 커밋
커밋 된 파일 이름을 php로 구문 분석하고 jenkins에 커밋 된 파일이 포함 된 자산 빌드를 요청합니다.
자산이 완성됨
※이번은 마음대로 빌드되면 곤란한 일도 있으므로 chatwork에 jenkins빌드용의 링크가 날아와 그것을 포치하면 jenkins가 돌리는 흐름으로 했다
GitLab의 webhook을 사용해 보았습니다.
⑴ GitLab에 로그인
⑵ 프로젝트 열기
⑶ Setting > Integrations를 선택
⑷ webhook용 URL 입력
⑸ Trigger의 Push events를 선택
⑹ Add webhook
Git에서 전달되는 매개 변수는 무엇입니까?
GitLab의 Integration 아래에 커밋 이력이 있으며 거기에 전달 된 매개 변수의 이력도 남아 있습니다.
{
"object_kind": "push",
"event_name": "push",
"before": "xxxxxx",
"after": "********",
"ref": "refs/heads/feature_1.0.0",
"checkout_sha": "********",
"message": null,
"user_id": 1234,
"user_name": "テスト太郎",
"user_username": "testtaro",
"user_email": "",
"user_avatar": null,
"project_id": 123,
"project": {
"id": 123,
"name": "test_unity",
"description": "テストのunity puroject",
"web_url": "http://biz.xxxxxx.co.jp/*****/test_unity",
-- 一部省略
},
"commits": [
{
"id": "***********",
"message": "テストコミット\n",
"timestamp": "2019-12-05T13:08:23Z",
"url": "http://biz.xxxxxx.co.jp/*****/test_unity/commit/***************",
"author": {
"name": "テスト太郎",
"email": ""
},
"added": [
],
"modified": [
"test.png",
"test2.png"
],
"removed": [
]
}
],
-- 一部省略
}
의사 코드 (trigger.php)
커밋 된 파일을 구문 분석하고 jenkins에 필요한 매개 변수를 생성하여 채팅 워크에 흘립니다.
<?php
//------------------------------
// 変数
//------------------------------
$postdata = file_get_contents("php://input");
$postdata = json_decode($postdata, true);
$action = @$postdata['object_kind']; //merge_request
$commitUserId = @$postdata['user_id']; //コミットユーザー
$targetBranch = @$postdata['ref']; //target branch
$commitList = @$postdata['commits']; //コミットファイル情報
//------------------------------
// jenkinsに必要なパラメータを生成
//------------------------------
$jenkinsParamList = array();
// $commitListからパラメータに必要な情報を抜き取る
//------------------------------
// チャットワークにリンクを投げる
//------------------------------
sendMsg( $chatWorkId, $url, $jenkinsParamList );
/**
* メッセージ送信
*/
function sendMsg($to, $url, $parameters = array()) {
$msg = "[info][title]アセット回しますか?[/title]";
$msg .= "[To:".$to."]\n";
$msg .= "masterにコミットがされました\n";
$msg .= "\n";
$msg .= "↓クリックでビルド開始\n";
$msg .= $url . '?' . http_build_query($parameters)."\n";
$msg .= "\n";
$msg .= "[/info]";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://api.chatwork.com/v2/rooms/*****/messages");
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('X-ChatWorkToken:xxxxxxxx'));
$option = ;
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query(array('body' => $msg ), '', '&'));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($curl);
curl_close($curl);
}
jenkins 링크
이 링크를 포치하면 빌드 개시! ! 와이
채팅 워크에 흘리지 않고 jenkins를 직접 돌리는 경우 (php)
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://[Jenkinsユーザ名]:@[Jenkinsホスト]:8080/job/TEST_ASSET_BUILD/buildWithParameters" . '?' . http_build_query($parameters));
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$result = curl_exec($ch);
curl_close($ch);
참고
htps : // 센 dg 리 d. 케케. 이. jp/bぉg/? p=1851
h tps:// 퀵했다. 소 m/신고_가와라/있어 MS/아 C40592726f3756아 5c3D
Reference
이 문제에 관하여(GitLab webhook에서 jenkis 빌드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nagazapp/items/3a3690879d601621ae06텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)