手把手教你如何巧用Github的Action功能

2021-02-23 我的Android開源之旅
概念

GitHub Actions 是 GitHub 於2018年10月推出的持續集成服務。

那麼何謂持續集成呢?

持續集成

持續集成(Continuous integration),也就是我們經常說的CI。它是一種軟體開發實踐,可以讓團隊在持續的基礎上收到反饋並進行改進,不必等到開發後期才尋找和修復缺陷,常運用於軟體的敏捷開發中。Jenkins就是我們常用的持續集成平臺工具。

理解了持續集成的概念之後,下面我簡單講一下使用持續集成的好處:

提高效率,減少了重複性工作:一些重複性的工作寫成腳本交給持續集成服務執行。減少了人工帶來的錯誤:機器通過預先寫好的腳本執行犯錯的機率比人工低很多。減少等待的時間:一套完備的持續集成服務涵蓋了開發、集成、測試、部署等各個環節。提高產品質量:很多大公司在代碼提交後都會有一套代碼檢視腳本(俗稱門禁)來檢查代碼的提交是否符合規範,從而從源頭遏制問題的產生。Actions

相比較持續集成這個大概念,GitHub推出的 Actions 就顯得非常輕量和巧妙了。Actions就相當於持續集成中的某個特定功能的腳本,通過多個actions的自由組合,便可實現自己特定功能的持續集成服務。

同時,Github為了方便大家使用 Actions,還專門做了一個 Actions市場, 真的是非常方便!

GitHub Actions 有一些自己的術語:

1.workflow(工作流程):持續集成一次運行的過程,就是一個workflow。2.job(任務):一個workflow由一個或多個jobs構成,含義是一次持續集成的運行,可以完成多個任務。3.step(步驟):每個job由多個step構成,一步步完成。4.action(動作):每個step可以依次執行一個或多個命令(action)。workflow文件

GitHub Actions 的配置文件叫做workflow文件,存放在代碼倉庫的.github/workflows目錄, 如下圖所示:

workflow文件採用YAML格式,文件名可以任意取,但是後綴名統一為.yml,比如上圖的package.yml。

workflow文件的配置欄位非常多,詳見官方文檔 。下面是一些基本欄位:

1.name: workflow的名稱。如果省略該欄位,默認為當前workflow的文件名。2.on: 觸發workflow的條件,通常是某些事件,例如:release、push、pull_request等。詳細內容可以參照 官方文檔 。3.jobs: workflow文件的主體內容,表示要執行的一項或多項任務。jobs.<job_id>.name: job_id是任務的id,name是任務的描述。jobs.<job_id>.runs-on: runs-on運行所需要的虛擬機環境,它是必填欄位。jobs.<job_id>.needs: needs指定當前任務的依賴關係,即運行順序。jobs.<job_id>.steps: steps指定每個任務的運行步驟,可以包含一個或多個步驟。Actions的應用如何使用Action發布flutter插件

之前我寫過一篇《Flutter Plugin插件開發填坑指南》 ,講的就是如何開發一個flutter插件並進行發布。但由於我們發布插件到 flutter插件平臺 需要訪問外網,而且還需要給命令終端設置代理,所以每次的發布都非常的麻煩。

一個偶然的機會,我就在Action市場中發現了一個publish-dart-flutter-package插件,可以一鍵把自己的插件發布到 flutter插件平臺 ,腳本如下:

name: Pub Publish plugin

on: workflow_dispatch

jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v1
      - name: Publish
        uses: sakebook/actions-flutter-pub-publisher@v1.3.0
        with:
          credential: ${{ secrets.CREDENTIAL_JSON }}
          flutter_package: true
          skip_test: true
          dry_run: false

當然你也可以參考我的flutter_xupdate ,它就是利用這個Action進行發布的。

這裡我們可以看到,我們定義的觸發條件是workflow_dispatch,也就是手動觸發任務執行:需要我們點擊 Run workflow => 選擇 master 分支 => 點擊 Run workflow,如下圖所示:

這裡我們注意到定義了一個secrets.CREDENTIAL_JSON常量,也就是我們的google帳號認證證書,這裡需要我們在項目的Settings => 選擇 Secrets => 點擊 New repository secret來創建一個屬性名為CREDENTIAL_JSON的常量。對應的值你可以到你的用戶Home目錄下的.pub-cache文件夾下找到credentials.json文件。

下圖是我執行了一次發布action的結果,只需2分鐘,無需科學上網工具和給命令終端配置代理,即可完成flutter插件的發布,真的是非常方便!

如何使用Action打包apk

作為一名Android開發,你有沒有想過每次提交代碼或者發布版本的時候,github能夠對應幫你自動打包出一個apk?

這樣你既可以省去打包apk的時間,還免去了應用包的管理,豈不美哉?

那麼我們應該怎麼做呢?下面就是我實現的一個workflow腳本,主要的功能就是:在提交代碼或者發布版本的時候,自動構建腳本打包出apk,同時直接上傳至Artifacts存儲。

name: Android CI

on:
  release:
    types: [published]
  push:
    branches:
      - master
    tags:
      - '2.*'
  pull_request:
    branches:
      - master

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: set up JDK 1.8
        uses: actions/setup-java@v1
        with:
          java-version: 1.8
      - name: release apk sign
        run: |
          echo "給apk增加籤名"
          cp $GITHUB_WORKSPACE/.github/workflows/android.keystore $GITHUB_WORKSPACE/app/android.keystore
          sed '$a\RELEASE_STORE_FILE=./android.keystore'          $GITHUB_WORKSPACE/gradle.properties -i
      - name: build with gradle
        run: |
          echo "開始進行release構建"
          chmod +x gradlew
          ./gradlew app:assembleRelease
      - name : upload apk
        uses: actions/upload-artifact@master
        if: always()
        with:
          name: xupdate_apk
          path: ${{ github.workspace }}/app/build/outputs/apk/release

詳細配置可以參考我的XUpdate 中的配置。

這裡我們可以看到,我們定義的觸發條件是release,push和pull_request,觸發的分支是master,tags是2.*開頭的。

整個任務主要分為4個步驟:

1.set up JDK 1.8:構建java1.8的環境。2.release apk sign:配置應用的籤名。這裡需要注意的是,這個地方的籤名配置還是需要結合著build.gradle 文件的配置來編寫的。3.build with gradle:編譯構建apk。運行assembleRelease命令打release包。4.upload apk:上傳apk至Artifacts。

最後執行的效果如下:

如何使用Action來反擊白嫖黨

我在做開源項目的時候,經常能夠碰到一些個無名小號(白嫖黨),項目看都不看就提一些沒有任何價值的issues,然後你好心好意地回復了,他卻消失不見了...真的是讓人恨得牙痒痒的!

是的,你沒有看錯,Action居然還可以用來反擊白嫖黨!這也是之前我在逛掘金的時候偶然看到一篇文章《❌ 對白嫖怪 SAY NO !!! —— 如何在 GitHub 上阻止無恥白嫖》 發現的。

那麼他是怎麼做的呢?其實也很簡單,就是設置觸發的條件是issues的創建,在創建的時候去查詢一下issues的創建者是否star或者fork了該倉庫,如果滿足條件則不做處理,否則將自動鎖住並關閉issues。

當然,這位作者也是把這個非常騷的Action做成了一個插件,插件的地址是:https://github.com/marketplace/actions/no-free-usage-action ,使用起來非常簡單。

以下是我簡單使用的腳本案例:

name: No Free usage issue checker

on:
  issues:
    types: [opened, reopened]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      - name: Check issue actor
        uses: fluttercandies/no-free-usage-action@v1.0.1
        with:
          token: ${{ secrets.GITHUB_TOKEN }}  # 由GitHub提供的臨時Token,必須在此處進行傳遞,且必須為這個值。
          forked: '--no-forked'
          words:  To support our project, please file the issue after you starred the repo. Thanks! 🙂

這裡,我設置的觸發條件是issues的打開和重新打開事件,設置不強制fork,但是需要star。當一隻野生的白嫖黨出沒並在你的項目上提issues的時候,就會觸發下圖的效果:

看到上圖的效果,是不是感到很驚喜,很刺激?你以為你做白嫖黨我就沒有辦法治你?哈哈,給我老實點!

最後

都看到這兒了,還不趕緊三連支持一下,難道你也想做白嫖黨嗎?

更多資訊內容,歡迎搜索我的微信公眾號:【我的Android開源之旅】

相關焦點

  • 手把手教你選到合適尺寸的戒指
    原標題:手把手教你選到合適尺寸的戒指   導語:戒指早已不僅僅是結婚訂婚時才會佩戴的首飾,尤其打開美少女們的首飾盒,各種造型的戒指一應俱全,可即便擁有再多數量的戒指,每一次購買,女生們還是會在尺寸選擇上猶豫駐足,畢竟影響戒指尺寸選擇的因素真的不少,成長中難免遇到的胖瘦變化,一年四季更迭而至的季節變化,這些都可能給你選擇尺寸帶來些許的不確定因素
  • 如何排查偷拍的針孔攝像頭?這次手把手教你!
    多功能紅外探測儀防偷拍 找出隱藏攝像頭戳圖立即購買不管攝像頭為了偷拍,做到如何微型、如何針孔,被藏到如何隱蔽的角落,它們都有一個共同點如果你擔心不太會用,可以先用自己的手機鏡頭做個測試,看一眼探測儀掃描出來的「小紅點」是什麼樣子。
  • 功能逆天!百度最新GitHub開源項目來啦
    https://github.com/PaddlePaddle/X2Paddle飛槳作為國內最早開源的開源框架,在過去一年中技術生態迅猛發展,為開源社區貢獻多個模型套件。本月,我們將發布Paddle2ONNX最新版本V0.5,帶來更多重磅功能,覆蓋更多飛槳官方模型,期望通過ONNX這個橋梁,進一步推動飛槳、開發者和軟硬體廠商的合作!基於飛槳框架2.0,新版本的Paddle2ONNX主要新增實現了以下重要功能。
  • 深度剖析github上15.1k Star項目:redux-thunk
    本文轉載自【微信公眾號:趣談前端,ID:beautifulFront】經微信公眾號授權轉載,如需轉載與原文作者聯繫日益忙碌的一周又過去了,是時候開始每周一次的總結復盤了,今天筆者就來剖析一下github中star數15.1k的開源項目redux-thunk。
  • 華坪法院手把手教你如何用移動微法院網上立案
    輸入正確的用戶手機號及密碼進行登錄註:系統案件中已填寫了手機號的案件當事人均已自動註冊,當事人可直接使用手機號+密碼進行登錄,首次登錄後請及時修改密碼,防止信息洩露6.若登錄時不記得密碼的,點擊「忘記密碼」進入密碼重置界面,按提示進行密碼重置二、與個人案件有關的主要操作用戶登錄成功後顯示「個人中心」頁面,該頁面主要功能入口有用戶諮詢
  • 手把手教你用Java打造一款簡單故事書(下篇)
    2.能夠基本實現改變字號、字體、字形、顏色、壁紙等選擇,按鈕頁面切換功能。3.java讀取txt文件,簡化代碼。三、項目實施首先回顧上一節的手把手教你用Java打造一款簡單故事書(上篇),完成界面的窗口、菜單欄、上下頁的按鈕,效果如下圖所示。接下來,小編帶大家完成剩下的功能,具體的實現步驟如下。
  • 怎樣用u型夾固定頭髮不鬆脫 教你如何巧用u型髮夾
    怎樣用u型夾固定頭髮不鬆脫 教你如何巧用u型髮夾時間:2017-04-26 12:10   來源:伊秀女性網   責任編輯:沫朵 川北在線核心提示:原標題:怎樣用u型夾固定頭髮不鬆脫 教你如何巧用u型髮夾 大一點的U型夾髮飾就不說了,主要是點綴只用,以簡單黑色的小U型夾為例,固定一個花苞的時候,盤好的髮髻,用黑色小髮夾穿過頭髮
  • 如何巧用軟體製作體育微課?體育教師來教你
    戳左上角藍字「體育教師大本營」關注 每天早上8:30,大本營伴您成長 下城研耕體育學習團隊 教你如何巧用軟體製作
  • 轉載|手把手教你塗--如何給模型補縫!
    大家好,我是老王,手把手教你塗系列分享之旅已經發布幾期了,大家的反響還是不錯的
  • 大學生手把手教老人用手機
    「今天咱們學習如何用手機連接無線網絡,怎樣下載音樂軟體聽戲,還有網絡詐騙方面的相關知識。」近日,一場特殊的公益課在老軍營街道新南二社區舉辦,20多名老年人在志願者一對一指導下練習用手機支付、購物、打車等操作。
  • 手把手教你戴爾臺式機如何重裝系統
    重裝系統就是指對計算機內的作業系統進行重新的安裝,那麼問題來了,小夥伴你們知道戴爾臺式機要如何重裝系統嗎?不知道的話也沒有關係哦,因為接下來小編就將戴爾臺式機重裝系統win10的教程分享給大家。手把手教你戴爾臺式機如何重裝系統:1,先對戴爾筆記本內部的重要資料做好備份工作2,關閉殺毒軟體,打開系統之家一鍵重裝系統,選擇「在線安裝」進入。3,選擇一個自己需要重裝的作業系統版本,點擊「安裝此系統」點擊下一步。
  • 零基礎可上手 | 手把手教你用Cloud AutoML做毒蜘蛛分類器
    在這篇文章中,小哥手把手教你如何在零基礎的情況下也做一個圖像分類器出來,非常簡單容易上手,可以說是好玩又實用了。量子位將這篇文章全文翻譯整理,與大家分享。警告:這篇文章中包含蜘蛛(and蜘蛛俠)的照片,過敏患者請繞行~
  • 民警手把手教你找回丟失的手機
    、購物、聊天、照相、看新聞等等作用,可以說人們現在是一天都離不開手機,大家肯定多少都有過丟手機的經歷,民警也曾經丟過兩次手機,不過全部都找回來了,有朋友問了是不是用了什麼高科技,其實不然,只要你掌握方法很快就能掌握了,手機再也不怕被偷了,下面民警就來手把手教你:一、在手機上安裝使用騰訊手機管家,在騰訊手機管家的首頁下方選擇「高級工具」板塊進入。
  • 用情景填空訓練好詞好句,手把手教你寫出高分作文
    沒遇上高級語文老師給你寫作指導?沒關係,作為一名傑出的作家,她積累了多年的寫作經驗和技巧都是寶。現在,將她的作品《手把手教你看圖寫話》和大家見面啦!趕快拋開那些沉悶的書本,一起來看看吧!這裡有詳盡易懂的寫作技巧,一定會讓你愛上寫作。寫作技巧太多、太難?不用怕!讓手把手作文來幫你,教你掌握高分作文的秘訣。
  • 今天教你如何用 Python 搶票
    每到年末,票就變得特別難搞,今年因為疫情管控可能要比往年好一點,但依舊不好搶,,,對於路途相對較遠的小夥伴,一旦錯過了最佳放票時機,之後搶到票的的可能性很小,因為跟你一起競爭搶票的大部分都不是人而是自動化程序,在一秒之內就能完成購票下單的那種(當然,也是在有票的前提下)今天呢,給大家介紹一個 12306搶票 相關的開源項目,並手把手教大家把程序跑起來,希望我們大家都能搶到回家的票
  • 【輕鬆辦稅】小型微利難判斷手把手教你如何計算資產總額!
    【輕鬆辦稅】小型微利難判斷手把手教你如何計算資產總額!你還在為無法判斷企業資產總額是否符合小型微利條件而發愁嗎?那就跟著申稅小微來學習如何計算吧~01小型微利企業條件小型微利企業是指從事國家非限制和禁止行業,且同時符合以下三個條件的企業:1. 年度應納稅所得額不超過300萬元2.
  • 限時特惠|騰訊課堂&起點學院聯合打造:30天手把手教你搞定APP產品...
    以掌握常規APP產品的設計為最終目標,詳細拆解APP產品的核心功能模塊,全程項目實戰,導師深度輔導,30天手把手教你搞定APP產品設計。騰訊&起點學院聯合出品詳細拆解APP產品的核心功能模塊,構建最實用的APP設計體系課程;採用「知識講解+項目實戰+在線輔導+就業指導」四位一體的教學方式;項目實戰貫穿整個學習過程,導師全程深度輔導,30天掌握註冊登錄/內容分發/點評系統/積分系統等APP核心功能設計。適合人群APP產品經理是什麼?要做什麼?流程圖、原型怎麼畫,用什麼工具?
  • 手把手教你用Google翻譯不花錢給家中神獸輔導英語
    【TechWeb】4月16日,受新冠肺炎疫情影響,想必你(此刻正在上班)家裡的神獸(孩子)還沒開學,被困家中,正在線學習呢。老師遠在天邊,輔導孩子功課的重擔被迫由你承擔了。輔導語文數學可能你都能hold住,不過輔導英語可能就力有不逮了。
  • 手把手,K姐教你如何用英文撩妹(1st season)
    K姐今天就以親身的過往的豐富經歷,手把手教你不僅學會搭訕,還要用英文裝夠X,撩到你喜歡的妹紙。    首先,先要深究一個問題,「撩妹」用英文怎麼講。網絡上給出很多說法,K姐一一覺得不靠譜。在這裡,選出幾個能看的,請大家根據個人的段位,對號入座。
  • 筏釣拒絕交學費——手把手教你如何挑選筏釣輪
    隨著筏釣越來越普及,市場上大家能看到的筏釣輪越來越多,幾年前還要費心尋找的筏釣輪現在幾乎每家漁具店都有銷售,網店裡也是五花八門,樣式繁多,本期,我們將手把手教大家如何挑選筏釣輪。首先,從材質上我們先來看,現在市場上常見的筏釣輪,主要是由金屬材料製造,當然,一些低端筏釣輪在設計過程中仍然採取局部採用工程塑料的材質。