日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

统计gitlab代码行脚本_一点也不复杂, GitLab Webhook 自动部署代码

發布時間:2025/3/19 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 统计gitlab代码行脚本_一点也不复杂, GitLab Webhook 自动部署代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

項目使用了gitlab托管,以前部署代碼都是登錄服務器,然后git pull代碼。這樣每次需要發布代碼,都需要登錄,太繁瑣。很早就了解到 gitlab支持 webhook,能夠自動同步代碼。今天嘗試搭建成功了。

原理介紹

  • 配置gitlab當push動作的時候,訪問服務器上的一個鏈接比如pangxieke.com/tb.php

  • tb.php里面寫著一行代碼,會讓服務器git pull相應項目的代碼到web目錄。

  • pull結束,代碼就在web目錄了,我們只要重新訪問網站就可以了。

  • 核心就是push的時候,gitlab會調用服務器上的腳本,服務器上的腳本就會從git重新拉取項目文件。同時還需要加入安全性的設計。

    配置ssh密鑰

    先在服務端生成一對你的SSH密鑰,因為之后服務器要用ssh方式免賬號密碼從gitlab上pull代碼。用ssh-keygen在服務器上生成密鑰,或者你已經有密鑰了就跳過這一步。

    因為項目配置的nginx和php的用戶為www,所以代碼執行時以www用戶,所以需要www用戶的ssh密鑰

    服務器添加www的密鑰

    修改www用戶,允許登錄,項目配置完成后,再修改回nologin

    ;www:x:22:22:www:/var/www:/usr/sbin/nologin
    www:x:22:22:www:/var/www:/bin/bash

    su www
    cat ~/.ssh/id_rsa.pub

    //如果沒有
    ssh-keygen

    gitlab中配置ssh密鑰

    有了密鑰之后,復制你的公鑰,在你的gitlab profile個人資料里,找到SSH的目錄,粘貼保存進去就可以了。這樣gitlab上就有了你web服務器的公鑰了,就可以正常SSH了。

    也可以使用部署密鑰。不同的項目,可以共用相同部署密鑰,但記得在對應項目設置中啟動此密鑰

    服務器腳本

    先使用www用戶調用sh腳本,如果成功,下一步是通過php執行腳本。
    這里我們先使用www用戶測試,需要用www用戶登錄服務器測試。

    su www

    如果不能成功,可能是設置了www用戶為nologin,使用上述方法開啟即可。

    /home/www 下放了1個sh腳本, 內容如下

    #!/bin/bash
    cd /home/www/www.pangxieke.com
    /usr/bin/git pull origin master

    //或者 強制pull
    git fetch --all
    git reset --hard origin/master然后使用www用戶執行此腳本,測試是否能夠獲取代碼。如果成功后,下一步就是通過鉤子執行此腳本

    php執行腳本

    php通過exec函數執行腳本代碼tb.php。需要調用exec函數,如果發現不成功,有可能php.ini配置中禁用了exec函數,重新開啟即可//作為接口傳輸的時候認證的密鑰
    $valid_token = '87ea722e507383fb651ff0515b588b';
    //調用接口被允許的ip地址

    $client_token = $_GET['token'];
    $project = $_GET['project']; //多個項目
    $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);
    }

    $json = file_get_contents('php://input');
    $data = json_decode($json, true);
    fwrite($fs, 'Data: '.print_r($data, true).PHP_EOL);
    //這里也可以執行自定義的腳本文件update.sh,腳本內容可以自己定義。if($project == 'pangxieke'){
    $res = exec("/home/www/tb.sh", $result);
    }else if($project == 'pangxieke2'){
    $res = exec("/home/www/tb2.sh", $result);
    }

    fwrite($fs, 'Data: '.print_r($result, true).PHP_EOL);
    fwrite($fs, '======================================================================='.PHP_EOL);
    $fs and fclose($fs);
    var_dump($result);

    然后通過瀏覽器訪問測試

    www.pangxieke.com/tb.php?token=87ea722e507383fb651ff0515b588b&project=pangxieke

    如果訪問后,能夠返回git信息,就是代表成功。這樣就可以配置gitlab的觸發器

    如果失敗,可以查看auto_hook.log日志

    為支持多個項目 配置了project參數,可以部署多個項目。只需要在gitlab鉤子中配置時,使用不同的project參數。

    www.pangxieke.com/tb.php?token=87ea722e507383fb651ff0515b588b&project=pangxieke
    www.pangxieke.com/tb.php?token=87ea722e507383fb651ff0515b588b&project=pangxieke2

    gitlab鉤子設置

    然后就可以push代碼到倉庫,然后查看代碼是否部署成功

    部署完成記得修改www用戶為nologin

    來源:http://www.pangxieke.com/linux/1252.html

    互聯網、金融、通信 DevOps?轉型落地經驗,就在 GOPS 2020 ·?深圳站

    近期好文推薦:

    重磅!2020 年 DevOps 持續交付標準和技術運營標準評估報名正式啟動!

    遠程辦公條件下,DevOps 如何加快研發交付

    持續交付體系在高德的實踐歷程

    有了自動化就是 DevOps?淺談 DevOps 的反模式

    交付全鏈路數據,蘇寧消費金融在 DevOps 度量設計的思考

    流程可視化的利器:Jenkins BlueOcean

    我只是下了個訂單,鬼知道我在微服務里經歷了什么…

    DevOps 時代的軟件過程改進探討

    震驚!DevOps CI/CD 竟然對抗擊新冠期間的工作開展有這么大的作用?

    “DevOps時代”公眾號誠邀廣大技術人員投稿。

    投稿郵箱:jiachen@greatops.net 或 添加聯系人微信:135 2116 9787(同微信)。

    點擊,立即報名 GOPS 2020?· 深圳站

    你點的每個贊,我都認真當成了喜歡

    總結

    以上是生活随笔為你收集整理的统计gitlab代码行脚本_一点也不复杂, GitLab Webhook 自动部署代码的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。