GitHub搭建自己的持續集成

什么是持續集成

  • 代碼開發 -> 代碼提交 -> 服務器編譯、測試、打包 -> 服務器部署(大規模部署用 docker)
  • 上面這套流程中除了前兩個,其他的都自動執行,就是CI(持續集成)。

什么是GitHub Actions

  • GitHub Actions 是 GitHub 推出的持續集成服務,于 2018 年 10 月推出。
  • 之前是怎么做的:通過Webhook接入Jenkins
  • 現在更方便:Github直接提供服務器幫忙做編譯、測試、打包的工作,不需要額外搭建CI了
  • 每一個操作都是一個action,很多操作疊加起來就是很多的actions
  • 本質上就是每次提交代碼到github倉庫后,github會自動創建一個虛擬機(可以是Ubuntu、Mac、Windows),來執行一段或者多段指令。
  • 切換到 Action 選項板可以看到很多workflow的模板。

Github Actions的使用限制

  • 每個 Workflow 中 job 最多可以執行6個小時
  • 每個 Workflow 中最多可以執行72小時
  • 每個 Workflow 中的 job 最多可以排隊24小時
  • 在一個github庫中的所有Action中,一個小時最多可以執行1000個API的請求
  • 并發工作數: Linux 20,Mac: 5
  • 硬件限制:目前Github只支持3類操作系統(Ubuntu、Mac、Windows),配置如下
    (1)2 core CPUs
    (2)7 GB of RAM memory
    (3)14GB of SSD disk space

Actions市場

自己編寫Action

name: my_nam # 根據自己需求命名
on:  # 表示觸發條件,比如當代碼push到master分支的時候觸發,則
  push:  # 這里代表單個事件,也可以寫成 [push, workflow_dispatch] 多個事件
    branches:
      - master
  pull_request: # 也可以新增單個事件
    branches:
      - main

jobs:  # 表示實際需要執行的工作,比如下面的例子代表使用Ubuntu執行構建工作,執行步驟上使用了appleboy/ssh-action這個倉庫的能力
  build:
    name: Build
    runs-on: ubuntu-latest
    steps: # 每個job由多個step構成,會從上到下依次執行
      - name: executing remote ssh commands using password  # 步驟名
        uses: appleboy/ssh-action@master  #  引用其他的workflows文件

舉個例子:跑起來Actions只是為了單純打印一句話

name: Test
on: 
  push:
    branches:
    - develop
  pull_request:
    branches:
    - develop

jobs:
  my-job:
    name: Greeting for PARL
    runs-on: ubuntu-latest
    steps:
    - name: Print a greeting
      env:
        MY_VAR: Hi there! My name is
        FIRST_NAME: Hello world
      run: |
        echo $MY_VAR $FIRST_NAME

舉個例子:push后讓代碼執行單測

name: CI
on: push

jobs:
  ci:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repo
        run: |
          rm -rf ${{github.event.repository.name}}
          git clone https://${{github.repository_owner}}:${{github.token}}@github.com/${{github.repository}}
          git -C "${{github.workspace}}/${{github.event.repository.name}}" checkout ${{github.ref}}
      - name: Python unittest
        run: |
          python3 -m venv venv
          source venv/bin/activate
          cd ${{github.event.repository.name}}
          pip3 install -r requirements.txt
          pre-commit run -a
          python3 -m unittest discover -v
      - name: Cleanup
        run: |
          rm -rf venv
          rm -rf ${{github.event.repository.name}}

舉個例子:push后自動登錄自己的服務器,編譯打包

name: remote ssh command
on:
  push:
    branches:
      - master
jobs:
  build:
    name: Build
    runs-on: ubuntu-latest
    steps:
      - name: executing remote ssh commands using password
        uses: appleboy/ssh-action@master
        with: # 根據文件的說明,添加所需的配置參數:從這里開始因為涉及登錄賬號密碼,可以在 settings->secrets 里配置下面的變量,不會被泄露出去
          host: ${{ secrets.HOST }}
          username: ${{ secrets.USERNAME }}
          password: ${{ secrets.PASSWORD }}
          command_timeout: 5m
          script: |   # 登錄完成之后會連續執行這里的命令
            cd ~/test
            git pull origin master
            yarn
            yarn build

進階配置

  • 可以使用matrix并發的在不同的配置或者操作系統中執行單測。詳見Matrix配置項
  • 接收用戶輸入:可以等用戶輸入一個關鍵的信息,再執行整個流程。
  • Nightly 構建:用戶指定任何重復任務的觸發時間,比如每天凌晨兩點執行任務如下所示:
on: 
  schedule: 
    - cron: '0 18 * * *' 
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,367評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,001評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,213評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,535評論 1 308
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,317評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,868評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,963評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,090評論 0 285
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,599評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,549評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,712評論 1 367
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,233評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,961評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,353評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,607評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,321評論 3 389
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,686評論 2 370