天天看點

自動化釋出-GitLab WEB Hooks 配置

鈎子(hooks)

Git是在特定事件發生之前或之後執行特定腳本代碼功能(從概念上類比,就與監聽事件、觸發器之類的東西類似)。

Git Hooks就是那些在Git執行特定事件(如commit、push、receive等)後觸發運作的腳本。

gitlab的web hooks跟git hook類似。也是當項目發生送出代碼、送出tag等動作會自動去調用url,這個url可以是更新代碼。或者其他操作。

配置目的:

由于系統屬于背景接口系統,開發送出完git倉庫後要實時的部署到測試環境,這時候就需要用到gitlab的web hooks自動更新部署了。

用戶端:要自動更新的測試伺服器IP:192.168.1.2

服務端:Gitlab伺服器IP:192.168.1.1

Gitlab Version:     7.13.0.pre

GitLab-Shell  Version:     2.6.3

1、在用戶端上面配置apache配置檔案,為web hooks添加一個接口通路

#vim /usr/local/apache/conf/httpd.conf

listen 81

<VirtualHost *:81>

          ServerAdmin localhost

          DocumentRoot "/www/gitlab_web"

       <Directory "/www/gitlab_web">

            Options -Indexes +FollowSymLinks

            AllowOverride None

            Order allow,deny

            Allow from all

          </Directory>

       RewriteEngine on

</VirtualHost

2、在服務端gitlab上面為用戶端添加gitlab新賬号,然後将生成好的公鑰添加到gitlab好的賬号裡面(profile setting-->SSH  Keys -->add ssh key)

#su - webuser

#ssh-keygen -t rsa

進入項目目錄

#cd /path/project

初始化git倉庫 

#git clone [email protected]:test/test_api.git

3、在用戶端上面添加接口檔案

#vim /www/gitlab_web/index.php

<?php

//作為接口傳輸的時候認證的密鑰

$valid_token = 'd49dfa762268687eb2ca59498ce852';

//調用接口被允許的ip位址

$valid_ip = array('192.168.1.1','10.17.10.175','112.112.112.112');

$client_token = $_GET['token'];

$client_ip = $_SERVER['REMOTE_ADDR'];

$fs = fopen('./auto_hook.log', 'a');

fwrite($fs, 'Request on ['.date("Y-m-d H:i:s").'] from ['.$client_ip.']'.PHP_EOL);

if ($client_token !== $valid_token)

{

    echo "error 10001";

    fwrite($fs, "Invalid token [{$client_token}]".PHP_EOL);

    exit(0);

}

if ( ! in_array($client_ip, $valid_ip))

    echo "error 10002";

    fwrite($fs, "Invalid ip [{$client_ip}]".PHP_EOL);

$json = file_get_contents('php://input');

$data = json_decode($json, true);

fwrite($fs, 'Data: '.print_r($data, true).PHP_EOL);

fwrite($fs, '======================================================================='.PHP_EOL);

$fs and fclose($fs);

//這裡也可以執行自定義的腳本檔案update.sh,腳本内容可以自己定義。

//exec("/bin/sh /root/updategit.sh");

exec("cd  /path/project;/usr/bin/git pull");

4、通路接口,測試接口是否成功

http://192.168.1.2:81/?token=d49dfa7622681425fbcbdd687eb2ca59498ce852

5、檢視用戶端日志

#cat /www/gitlab_web/auto_hook.log

=======================================================================

Request on [2015-07-03 14:05:02] from [112.122.112.112]

Data: 

6、在服務端gitlab伺服器上面添加web hooks

admin area->projects->test/edit->WEB Hooks->add WEB Hooks

<a href="http://s3.51cto.com/wyfs02/M00/6F/47/wKiom1WWX6qhXEhdAAM3gTdDuvU940.jpg" target="_blank"></a>

7、送出修改代碼到gitlab倉庫,然後檢視日志、檢視測試環境是否更新

Request on [2015-07-03 14:13:37] from [12.123.12.3]

Data: Array

(

    [object_kind] =&gt; push

    [before] =&gt; e5988b5dce7a038

    [after] =&gt; d8ce92ac4ab4ba046dd

    [ref] =&gt; refs/heads/master

    [checkout_sha] =&gt; d8ceefd5c4ab4ba046dd

    [message] =&gt; 

    [user_id] =&gt; 7

    [user_name] =&gt; test

    [user_email] =&gt; [email protected]

    [project_id] =&gt; 3

    [repository] =&gt; Array

        (

            [name] =&gt; test_api

            [url] =&gt; [email protected]:test/test.api

            [description] =&gt; test.com product code

            [homepage] =&gt; http://xx./test_api

            [git_http_url] =&gt; http://xx./test_api 

            [git_ssh_url] =&gt; [email protected]:test.git

            [visibility_level] =&gt; 10

        )

    [commits] =&gt; Array

            [0] =&gt; Array

                (

                    [id] =&gt; d8cec4ab4ba046dd

                    [message] =&gt; 測試gitlab的web hook接口。

                    [timestamp] =&gt; 2015-07-03T14:13:51+08:00

                    [url] =&gt; http://xxxx/test_api/commit/d8ce95c4ab4ba046dd

                    [author] =&gt; Array

                        (

                            [name] =&gt; test

                            [email] =&gt; [email protected]

                        )

                )

    [total_commits_count] =&gt; 1

)

注意事項:

1、配置完成後。調用接口的時候沒有自動更新到測試環境。可以使用apache的運作使用者測試指令是否可以執行成功

#git pull

2、如果apache的使用者無法執行指令或者無法更新git代碼請檢查一下apache使用者的shell。

參考資料:

<a href="http://blog.ycnets.com/2013/10/19/automatic-update-version-with-gitlab-web-hook/#disqus_thread" target="_blank">http://blog.ycnets.com/2013/10/19/automatic-update-version-with-gitlab-web-hook/#disqus_thread</a>

本文轉自 張玉坡 51CTO部落格,原文連結:http://blog.51cto.com/fighter/1670667