近期因爲某些(窮)緣由,團隊機器人由travis
全面切換到了github actions
,因爲習慣了travis
機器人自動提醒,因此總但願可以在github actions
推送釘釘的過程當中更加人性化。看下最終效果:html
點擊相應的連接後能夠跳轉到對應的pull request
。git
成功實現上述效果進行了32次提交
特此記錄解決過程,但願能對你們有所幫助。github
name: get pull request info for Dingding on: pull_request: jobs: spring-boot: runs-on: ubuntu-latest timeout-minutes: 10 steps: - name: checkout uses: actions/checkout@v2 # 此處省略具體的業務代碼 # 獲取PR信息並將其添加到環境變量 - name: set PR_INFO run: | echo PR_NUMBER=$(echo $GITHUB_REF | awk 'BEGIN { FS = "/" } ; { print $3 }') >> $GITHUB_ENV echo PR_TITLE=$(jq --raw-output .pull_request.title "$GITHUB_EVENT_PATH") >> $GITHUB_ENV echo PR_URL=$(jq --raw-output .pull_request.html_url "$GITHUB_EVENT_PATH") >> $GITHUB_ENV echo PR_USER=$(jq --raw-output .pull_request.user.login "$GITHUB_EVENT_PATH") >> $GITHUB_ENV # 打印環境變量 - name: print env run: printenv # 發送釘釘消息 - name: build success if: ${{ success() }} uses: fifsky/dingtalk-action@master with: url: https://oapi.dingtalk.com/robot/send?access_token=這裏寫釘釘機器人的token type: markdown content: | # 💯👨💻 Success 🎉🎉🎉 > Maven Build of [# ${{ env.PR_TITLE }}](${{ env.PR_URL }}) by ${{ env.PR_USER }} success > ^_^ from github action message - name: maven build failure if: ${{ failure() }} uses: fifsky/dingtalk-action@master with: url: https://oapi.dingtalk.com/robot/send?access_token=${{ env.DING_TOKEN}}若是是公有項目則應該在github項目中依次點擊settings -> secret 添加一個DING_TOKEN,並設置爲本身的釘釘機器人token type: markdown content: | # 💤🤷♀️ failure 🙅♂️💣 > Maven Build of [# ${{ env.PR_TITLE }}](${{ env.PR_URL }}) by ${{ env.PR_USER }} failure > (⋟﹏⋞) from github action message
解決過的主要精力在於獲取PR信息,以及若是將獲取到的PR信息添加到環境變量中。具體解決歷程以下:web
若但願打造一個更友好的釘釘提示消息,咱們須要在github actions
中最少獲取pull request
的名稱、地址、提交者。spring
很遺憾github actions
提供的默認環境變量中並無給出友好的pull reqeuest
信息,惟一可以找到一些pull reqeuest
信息的環境變量爲$GITHUB_REF
,形式爲refs/pull/:prNumber/merge
。json
即便咱們能夠經過$(echo $GITHUB_REF | awk 'BEGIN { FS = "/" } ; { print $3 }')
的方法來獲取到該PR號,但仍然沒法獲取到PR的名稱。ubuntu
若要獲取到更多的信息,則須要結合使用環境變量GITHUB_EVENT_PATH
segmentfault
官方如上說明:該變量的值是個文件path,該文件記錄了本次webhook的完整信息。打印環境變量:api
- name: print env run: printenv
顯示爲:安全
GITHUB_EVENT_PATH=/home/runner/work/_temp/_github_workflow/event.json
接着顯示該文件中的內容:
- name: print event run: more /home/runner/work/_temp/_github_workflow/event.json
此時咱們便獲取到一個完整的信息,在此我去除掉大部分本次沒有用的信息,展現一些有用的信息以下:
{ "action": "synchronize", "number": 356, "pull_request": { "html_url": "https://github.com/yunzhiclub/questionnaire/pull/356", "title": "Update maven.yml", "user": { "login": "teacherpan", } }, "repository": { "description": "問卷系統", } }
想要的信息有了之後就可使用jq
命令由json文件中獲取到相應的信息了:
好比使用$(jq --raw-output .pull_request.title "$GITHUB_EVENT_PATH")
來獲取PR的標題。
github actions
的環境變量設置好像僅僅可以設置靜態的值,好比:
jobs: weekday_job: runs-on: ubuntu-latest env: DAY_OF_WEEK: Mon
但沒法將一些執行語句的返回值設置給某個環境變量,最終使用的是將特定的值寫入$GITHUB_ENV
的方法:
- name: set PR_INFO run: | echo PR_NUMBER=$(echo $GITHUB_REF | awk 'BEGIN { FS = "/" } ; { print $3 }') >> $GITHUB_ENV echo PR_TITLE=$(jq --raw-output .pull_request.title "$GITHUB_EVENT_PATH") >> $GITHUB_ENV echo PR_URL=$(jq --raw-output .pull_request._links.html.href "$GITHUB_EVENT_PATH") >> $GITHUB_ENV echo PR_USER=$(jq --raw-output .pull_request.user.login "$GITHUB_EVENT_PATH") >> $GITHUB_ENV
在系統變量中有了相關的PR信息,發送消息即是最簡單的一環了。在github actions 市場中以Ding ding爲關鍵字能夠找到不少相關的actions。咱們使用的是fifsky/dingtalk-action
。
- name: build success if: ${{ success() }} uses: fifsky/dingtalk-action@master with: url: https://oapi.dingtalk.com/robot/send?access_token=這裏寫釘釘機器人的token type: markdown content: | # 💯👨💻 Success 🎉🎉🎉 > Maven Build of [# ${{ env.PR_TITLE }}](${{ env.PR_URL }}) by ${{ env.PR_USER }} success > ^_^ from github action message
由於GITHUB ACTIONS
的IP應該不是靜態不變的,因此釘釘機器人的認證方式只能採用關鍵字
的方式。若是你的項目是公有項目,則須要注意隱藏掉釘釘TOKEN。不然哪天你的釘釘莫名的接收到一些廣告的話,就不要奇怪了。
隱藏TOKEN的方式是在GITHUB對應的項目中,依次點 設置 -> 安全 -> token,而後創建一個DING_TOKEN
。最後使用access_token=${{ DING_TOKEN }}
。
釘釘機器人是能夠接收markdown
格式消息的,這也意味着咱們能夠在提醒的消息上加入一些自定義的圖片或是爲文字增長顏色等。但更簡單的方法是引入emoji圖標,直接將圖標複製再粘貼到對應的位置就能夠了,該圖標就是一個標準的文字。
😎 👩🦳 🍁 🍇
開發一個定製的github action
來簡化上述步驟。