自從 github
提供了 github actions
後,我的或者依賴於 github
的公司能夠考慮把持續集成方案遷到 github actions
。前端
github
會提供一個如下配置的服務器作爲 runner,能夠說至關良心了。vue
另外若是你有網絡時延的需求,也能夠自建 runner。(好比構建及拉取鏡像)node
本文將介紹 github actions
的用法,以及如何使用它自動部署我的博客或者前端應用git
在 github
上進入我的倉庫,找到 Actions
的標籤頁github
若是你是一個前端項目,可使用 Node.js
的模板,點擊 Set up this workflow
面試
此時生成了一個文件 .github/workflows/nodejs.yaml
,修改內容以下docker
name: Git Action Test
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Use Node.js 10.x
uses: actions/setup-node@v1
with:
node-version: 10.x
- name: npm install, build
run: | npm install npm run build --if-present env:
CI: true
複製代碼
執行 git push
操做,此時能夠在 github
的 Actions
標籤頁看到執行結果shell
runner
: github 分配的用來執行 CI/CD 的構建服務器 (也能夠自建 runner)workflow
: CI/CD 的工做流job
: 任務,好比構建,測試和部署。每一個 workflow
由多個 job
組成step
: 每一個 job
由多個 step
組成參考官方文檔: Workflow syntax for GitHub Actionsexpress
該 CI/CD 觸發時的事件。若是須要上傳代碼自動部署的功能時,應該選擇 on: push
npm
on: push
複製代碼
更多事件能夠參考官方文檔 Events that trigger workflows
另外,咱們能夠利用 issues
事件作不少事情,如郵件通知之類
若是是 Issue 類博客,則能夠經過監聽
issues.opened
事件,調用github api
,自動生成網址博客
on:
issues:
types: [opened, edited, milestoned]
複製代碼
一個 CI/CD 的工做流有許多 jobs
組成,好比最典型的 job 是 lint
,test
,build
或者 deploy
。
jobs:
test:
build:
deploy:
複製代碼
全部的 job
都是並行的,但每每會有依賴關係:你總得經過測試了,才能再去部署吧
needs
肯定 job
的依賴關係
jobs:
test:
deploy:
needs: test
複製代碼
當你使用 github actions
時,github 會十分大方的給你分配一個配置還不錯的服務器做爲構建服務器,用來跑你的 workflow
恩,比我本身的服務器要強
使用 runs-on
指定服務器系統,用的最多的應該就是 ubuntu-latest
了
runs-on: ubuntu-latest
runs-on: windows-latest
複製代碼
即某個任務的一系列動做,如部署一個前端須要安裝依賴,編譯代碼等等
爲 step 指定一個名稱,將會在 github action
的控制檯中顯示
該 step 須要在 shell
中執行的命令
# 單行
- name: Install Dependencies
run: npm install
# 多行
- name: Install and Build
run: | npm install npm run build 複製代碼
選擇一個 action
,能夠理解爲若干 steps.run
,有利於代碼複用。這也是 github action
最主要的功能。
若是你想找一個好用的 github action
,能夠在 github marketplace
瀏覽並檢索
這是一個在當前操做系統中安裝 node:10
的 action 示例
- name: use Node.js 10.x
uses: actions/setup-node@v1
with:
node-version: 10.x
複製代碼
固然,這裏怎麼能少得了 docker
的身影呢,在 actions
中也可使用 docker
。若是對 docker
不太瞭解,能夠看個人文章: docker 簡易入門
如下是 npm install
的一個示例
jobs:
build:
steps:
- name: Install
uses: docker://node:alpine
with:
args: npm install
複製代碼
如何在 github action
上訪問敏感數據?如使用 ssh
登陸時如何維護密碼。
咱們能夠在 github repo 上依次點擊 Settings
-> Secrets
設置 secret
- name: setup aliyun oss
uses: manyuanrong/setup-ossutil@master
with:
endpoint: oss-cn-beijing.aliyuncs.com
access-key-id: ${{ secrets.OSS_KEY_ID }}
access-key-secret: ${{ secrets.OSS_KEY_SECRET }}
複製代碼
這裏的 secret
就是一種 context
,描述 CI/CD 一個 workflow
中的上下文信息,使用 ${{ expression }}
語法表示。除了 secret
,還有
github
: workflow
的信息,如 github.sha
能夠獲取當前的 commit SHA
,咱們能夠利用它爲 sentry
或者 docker image
打入版本號env
: 環境變量job
: 當前執行 job
的信息,如 job.status
表示當前 job
的執行狀態matrix
: 描述一些構建信息,如 node
以及 os
版本號更多 context
信息能夠參考官方文檔 Contexts and expression syntax for GitHub Actions
個人博客目前託管在阿里雲OSS上,如下 action.yaml
描述了自動部署的流程。能夠參考個人配置 shfshanyue/blog
name: deploy to aliyun oss
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
# 切代碼到 runner
- uses: actions/checkout@v1
with:
submodules: true
# 下載 git submodule
- uses: srt32/git-actions@v0.0.3
with:
args: git submodule update --init --recursive
# 使用 node:10
- name: use Node.js 10.x
uses: actions/setup-node@v1
with:
node-version: 10.x
# npm install
- name: npm install and build
run: | npm install npm run build env:
CI: true
# 設置阿里雲OSS的 id/secret,存儲到 github 的 secrets 中
- name: setup aliyun oss
uses: manyuanrong/setup-ossutil@master
with:
endpoint: oss-cn-beijing.aliyuncs.com
access-key-id: ${{ secrets.OSS_KEY_ID }}
access-key-secret: ${{ secrets.OSS_KEY_SECRET }}
- name: cp files to aliyun
run: ossutil cp -rf .vuepress/dist oss://shanyue-blog/
複製代碼
部署成功
我是山月,我會按期分享全棧文章在我的公衆號中。若是你對全棧面試,前端工程化,graphql,devops,我的服務器運維以及微服務感興趣的話,能夠關注我。若是想進羣交流,能夠添加我微信 shanyue94,備註加羣。