團隊合作Git flow與Telegram bot

團隊合作Git flow與Telegram bot

首先我們要讓bitbucket有人push時可以通知我們的server

寫上如下程式在test1.js

var express = require('express');
var bodyParser = require('body-parser');
var app = express();
var port = 8000;
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.post('/payload', (req, res) => {
  console.log(req.body);
})


app.listen(port,() => console.log(`listening on ${port}`));

之後因為我們目前用localhost測試,所以我們架的server如果是在NAT或是firewall下面的話外面沒辦法使用post打入資料,所以我們要用ngrokhttps://ngrok.com/download 這個軟體來讓我們server expose出去給外界

下載好之後解壓縮,之後在他的執行檔下面的同層目錄執行 ./ngrok http 8000 8000為要開放給外界的port

ex:

~/downloads/ngrok http 8000

之後執行後終端機會產生兩組url分別是http與https的,我們把他加入bitbucket的webhook,並且在產生的url路徑後面加入/payload因為我們之後server要接post的路徑是/payload

然後啟動我們剛才寫的server 之後隨意push到bitbucket該repository上即可看到server的log

注意:如果ngrok重新啟動都會產生不同的url所以webhook的url也要更改

如果你是用EC2等虛擬主機或其他public IP則可以直接放入你的ip地址可以不用使用ngrok的服務

因為剛才的程式碼每次hook post過來的東西會包含以前舊的commit但我們只要新的,所以可改為

var express = require('express');
var bodyParser = require('body-parser');
var util = require('util');
var app = express();
var port = 8000;
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.post('/payload', (req, res) => {
 console.log(util.inspect(req.body.push.changes[0].new, {depth: null}));
})


app.listen(port,() => console.log(`listening on ${port}`));

之後把終端機的object複製到瀏覽器的devtool中,可以比較方便去觀察

結合telegram Bot

先到https://web.telegram.org 申請帳號

之後再左側搜尋框輸入botFather

然後跟他對話,一開始先輸入/start,然後輸入/newbot

再來輸入我們的bot名稱,以及bot帳號

注意帳號不可重複,但有時雖然沒重複還是會出現錯誤

此時重新開啟telegram或是稍等一下再次輸入即可

成功後會出現類似如下,並給我們一個token

Done! Congratulations on your new bot. You will find it at t.me/kjjkbot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this.

Use this token to access the HTTP API:.....

使用Node.js與telegram bot溝通

之後我們使用npm install node-telegram-bot-api --save

然後貼上以下程式碼

var express = require('express');
var bodyParser = require('body-parser');
var util = require('util');
var app = express();
var port = 8000;

var TelegramBot = require('node-telegram-bot-api');
var token = '改為你的token';
//括號裡面的內容需要改為在第5步獲得的Token
var bot = new TelegramBot(token, {polling: true});



app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.post('/payload', (req, res) => {
  var obj = req.body.push.changes[0].new;
  msgPayload = `${obj.target.author.raw} push 到 ${obj.name} 分支,查看該次commit: ${obj.links.html.href}`
  bot.sendMessage(324090896, msgPayload); 
})

//Bot
bot.onText(/hihi/, function (msg) {
    var chatId = msg.chat.id; //房間ID
    var resp = '你好'; //括號裡面的為回應內容,可以隨意更改
    console.log(chatId);
    bot.sendMessage(chatId, resp); //發送訊息的function
});


app.listen(port,() => console.log(`listening on ${port}`));

記得先把token改為你的,然後執行程式

接著到telegram左上選單,點選new group,在輸入框輸入剛才的bot 帳號(username)

然後與這個bot對話,輸入hihi

看一下terminal的console,應該會出現一串數字,此為msg.chat.id

把它貼到上面app.post('/payload')中的bot.sendMessage('', msgPayload);

把第一個參數改為這串數字

最後試著push到bitbucket即可看到telegram出現訊息

Git flow

Git flow 算是我們在管理git branch中的一種實踐

作者有提供一個相關工具,但也可以選擇不使用 https://github.com/nvie/gitflow

流程主要為下面

主要分支
master branch: 將會永遠保持在 production-ready 狀態,所以每次要merge上來要確保是可以正常執行的
develop branch: 下次準備發佈release的開發中狀態

Feature branch: 有任何新功能要開發都從 develop 分支出來,完成後 merge 回去 develop
Release branch: 準備要 release 發佈前的版本,從 develop 分支出來,完成後將會 merge 回 master 和 develop
Hotfix branch: 等不及 release 版本就必須馬上修改 master 上線的情況,將會從 master 分支出來,完成後 merge 回 master 和 develop

Last updated