GitLab webhook에서 jenkis 빌드

5543 단어 JenkinsPHPWebhook

소개



프로젝트 운영으로 자산을 만들 때 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

좋은 웹페이지 즐겨찾기