在github actions中獲取pull request連接等信息並推送釘釘的一種方法

近期因爲某些(窮)緣由,團隊機器人由travis全面切換到了github actions,因爲習慣了travis機器人自動提醒,因此總但願可以在github actions推送釘釘的過程當中更加人性化。看下最終效果:html

image.png

點擊相應的連接後能夠跳轉到對應的pull requestgit

成功實現上述效果進行了32次提交
image.png
image.png
特此記錄解決過程,但願能對你們有所幫助。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

獲取pull request相關信息

若但願打造一個更友好的釘釘提示消息,咱們須要在
github actions中最少獲取pull request名稱地址提交者spring

很遺憾github actions提供的默認環境變量中並無給出友好的pull reqeuest信息,惟一可以找到一些pull reqeuest信息的環境變量爲$GITHUB_REF,形式爲refs/pull/:prNumber/mergejson

即便咱們能夠經過$(echo $GITHUB_REF | awk 'BEGIN { FS = "/" } ; { print $3 }')的方法來獲取到該PR號,但仍然沒法獲取到PR的名稱。ubuntu

若要獲取到更多的信息,則須要結合使用環境變量GITHUB_EVENT_PATH
image.pngsegmentfault

官方如上說明:該變量的值是個文件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 }}

引入emoji圖標字

釘釘機器人是能夠接收markdown格式消息的,這也意味着咱們能夠在提醒的消息上加入一些自定義的圖片或是爲文字增長顏色等。但更簡單的方法是引入emoji圖標,直接將圖標複製再粘貼到對應的位置就能夠了,該圖標就是一個標準的文字。

😎 👩‍🦳 🍁 🍇

todo

開發一個定製的github action來簡化上述步驟。

相關文章
相關標籤/搜索