统计gitlab代码行脚本_一点也不复杂, GitLab Webhook 自动部署代码
原理介紹
配置gitlab當push動作的時候,訪問服務器上的一個鏈接比如pangxieke.com/tb.php
tb.php里面寫著一行代碼,會讓服務器git pull相應項目的代碼到web目錄。
pull結束,代碼就在web目錄了,我們只要重新訪問網站就可以了。
配置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/nologinwww: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用戶登錄服務器測試。
如果不能成功,可能是設置了www用戶為nologin,使用上述方法開啟即可。
/home/www 下放了1個sh腳本, 內容如下
#!/bin/bashcd /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=pangxiekewww.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 自动部署代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: go 判断元素是否在slice_Go内置
- 下一篇: 时间复杂度为on的排序算法_排序算法am