github action自动部署构建入门
Github Action自動(dòng)部署構(gòu)建
文章目錄
- Github Action自動(dòng)部署構(gòu)建
- 1. 簡(jiǎn)介
- 2. 基礎(chǔ)概念
- 3. workflow 文件
- 3.1 觸發(fā)事件
- 3.2 job任務(wù)
- 3.3 運(yùn)行主機(jī)環(huán)境
- 3.4 運(yùn)行步驟
- 3.5 引用action
- 3.6 顯示workflow status
- 3.7 with傳參
- 3.8 env環(huán)境變量
- 3.9 secrets引用
- 3.10 action/checkout檢查
- 4. 獲取token
- 5. 示例
- 5.1 一條命令的action
- 5.2 React 項(xiàng)目發(fā)布到 GitHub Pages
1. 簡(jiǎn)介
GitHub Actions 是 GitHub 的持續(xù)集成服務(wù),于2018年10月推出。
GitHub Actions 幫助您自動(dòng)完成軟件開(kāi)發(fā)周期內(nèi)的任務(wù)。 GitHub Actions 是事件驅(qū)動(dòng)的,意味著您可以在指定事件發(fā)生后運(yùn)行一系列命令。
工作流程是您添加到倉(cāng)庫(kù)的自動(dòng)化過(guò)程。 工作流程由一項(xiàng)或多項(xiàng)作業(yè)組成,可以計(jì)劃或由事件觸發(fā)。 工作流程可用于在 GitHub 上構(gòu)建、測(cè)試、打包、發(fā)布或部署項(xiàng)目。
GitHub 官方市場(chǎng),我們除了自己編寫(xiě)action,也可以借用別人的。
每個(gè) action 就是一個(gè)獨(dú)立腳本,因此可以做成代碼倉(cāng)庫(kù),使用userName/repoName的語(yǔ)法引用 action。比如,actions/setup-node就表示github.com/actions/setup-node這個(gè)倉(cāng)庫(kù),它代表一個(gè) action,作用是安裝 Node.js。事實(shí)上,GitHub 官方的 actions 都放在 github.com/actions 里面。
actions 也有版本的概念,下面都是合法的 action 引用,用的就是 Git 的指針概念,詳見(jiàn)官方文檔。
actions/setup-node@74bc508 # 指向一個(gè) commit actions/setup-node@v1.0 # 指向一個(gè)標(biāo)簽 actions/setup-node@master # 指向一個(gè)分支2. 基礎(chǔ)概念
GitHub Ac-tions 為每個(gè)任務(wù) (job) 都提供了一個(gè)虛擬機(jī)來(lái)執(zhí)行,每臺(tái)虛擬機(jī)都有相同的硬件資源:
- 2-core CPU
- 7 GB RAM 內(nèi)存
- 14 GB SSD 硬盤(pán)空間
使用限制:
- 每個(gè)倉(cāng)庫(kù)只能同時(shí)支持20個(gè) workflow 并行。
- 每小時(shí)可以調(diào)用1000次 GitHub API 。
- 每個(gè) job 最多可以執(zhí)行6個(gè)小時(shí)。
- 免費(fèi)版的用戶(hù)最大支持20個(gè) job 并發(fā)執(zhí)行,macOS 最大只支持5個(gè)。
- 私有倉(cāng)庫(kù)每月累計(jì)使用時(shí)間為2000分鐘,超過(guò)后$ 0.008/分鐘,公共倉(cāng)庫(kù)則無(wú)限制。
操作系統(tǒng)方面可選擇 Win-dows server、Linux、ma-cOS,并預(yù)裝了大量軟件包和工具。
雖然名稱(chēng)叫持續(xù)集成,但當(dāng)所有任務(wù)終止和完成時(shí),虛擬環(huán)境內(nèi)的數(shù)據(jù)會(huì)隨之清空,并不會(huì)持續(xù)。即每個(gè)新任務(wù)都是一個(gè)全新的虛擬環(huán)境。
3. workflow 文件
GitHub Ac-tions 的配置文件叫做 work-flow 文件(官方中文翻譯為 “工作流程文件”),存放在代碼倉(cāng)庫(kù)的.github/workflows 目錄中。work-flow 文件采用 YAML 格式,文件名可以任意取,但是后綴名統(tǒng)一為.yml,比如 p3terx.yml。一個(gè)庫(kù)可以有多個(gè) work-flow 文件,GitHub 只要發(fā)現(xiàn).github/workflows 目錄里面有.yml 文件,就會(huì)按照文件中所指定的觸發(fā)條件在符合條件時(shí)自動(dòng)運(yùn)行該文件中的工作流程。在 Ac-tions 頁(yè)面可以看到很多種語(yǔ)言的 work-flow 文件的模版,可以用于簡(jiǎn)單的構(gòu)建與測(cè)試。
workflow 文件的配置字段非常多,詳見(jiàn)官方文檔。下面是一些基本字段。
3.1 觸發(fā)事件
#push事件觸發(fā) workflow。 on: push#on字段也可以是事件的數(shù)組。`push`事件或`pull_request`事件都可以觸發(fā) `workflow`。 on: [push, pull_request] #只有`master`分支發(fā)生`push`事件時(shí),才會(huì)觸發(fā) workflow on:push:branches: - master #push tag 時(shí)觸發(fā) on:push:tags:- 'v*'#發(fā)布 re-lease 觸發(fā) on:release:types: [published]定時(shí)觸發(fā)on:schedule:- cron: '0 * * * *'3.2 job任務(wù)
workflow 文件的主體是jobs字段,表示要執(zhí)行的一項(xiàng)或多項(xiàng)任務(wù)。
jobs字段里面,需要寫(xiě)出每一項(xiàng)任務(wù)的job_id,具體名稱(chēng)自定義。job_id里面的name字段是任務(wù)的說(shuō)明。
3.3 運(yùn)行主機(jī)環(huán)境
runs-on字段指定運(yùn)行所需要的虛擬機(jī)環(huán)境。它是必填字段。目前可用的虛擬機(jī)如下。
ubuntu-latest,ubuntu-18.04或ubuntu-16.04 windows-latest,windows-2019或windows-2016 macOS-latest或macOS-10.14 runs-on: ubuntu-18.043.4 運(yùn)行步驟
#`steps`字段指定每個(gè) `Job` 的運(yùn)行步驟,可以包含一個(gè)或多個(gè)步驟。每個(gè)步驟都可以指定以下三個(gè)字段。 jobs.<job_id>.steps.name:步驟名稱(chēng)。 jobs.<job_id>.steps.run:該步驟運(yùn)行的命令或者 action。 jobs.<job_id>.steps.env:該步驟所需的環(huán)境變量。 steps:- uses: actions/setup-node@74bc508 # Reference a specific commit- uses: actions/setup-node@v1 # Reference the major version of a release- uses: actions/setup-node@v1.2 # Reference a minor version of a release- uses: actions/setup-node@master # Reference a branch示例:
jobs:build:# Job name is Greetingname: Greeting# This job runs on Linuxruns-on: ubuntu-lateststeps:# This step uses GitHub's hello-world-javascript-action: https://github.com/actions/hello-world-javascript-action- name: Hello worlduses: actions/hello-world-javascript-action@v1with:who-to-greet: 'Mona the Octocat'id: hello# This step prints an output (time) from the previous step's action.- name: Echo the greeting's timerun: echo 'The time was ${{ steps.hello.outputs.time }}.'3.5 引用action
#public repo {owner}/{repo}@{ref} or {owner}/{repo}/{path}@{ref}. #same repo{owner}/{repo}@{ref} or ./path/to/dir|-- hello-world (repository)| |__ .github| └── workflows| └── my-first-workflow.yml| └── actions| |__ hello-world-action| └── action.ymljobs:build:runs-on: ubuntu-lateststeps:# This step checks out a copy of your repository.- uses: actions/checkout@v1# This step references the directory that contains the action.- uses: ../github/actions/hello-world-action#docker container docker://{image}:{tag} 示例:jobs:my_first_job:steps:- name: My first stepuses: docker://gcr.io/cloud-builders/gradle- name: Install Dependenciesrun: npm installshell: bash3.6 顯示workflow status
3.7 with傳參
firstname ,會(huì)被轉(zhuǎn)化為INPUTFIRST_NAME使用
jobs:my_first_job:steps:- name: My first stepuses: actions/hello_world@masterwith:first_name: Monamiddle_name: Thelast_name: Octocat3.8 env環(huán)境變量
steps:- name: Hello worldrun: echo Hello world $FIRST_NAME $middle_name $Last_Name!env:FIRST_NAME: Monamiddle_name: TheLast_Name: Octocat3.9 secrets引用
steps:- name: My first actionenv:GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}FIRST_NAME: MonaLAST_NAME: Octocatsteps:- name: Hello world actionwith: # Set the secret as an inputsuper_secret: ${{ secrets.SuperSecret }}env: # Or as an environment variablesuper_secret: ${{ secrets.SuperSecret }}3.10 action/checkout檢查
https://github.com/actions/checkout
最新版本特性:
- 提高性能
默認(rèn)情況下只獲取一個(gè)提交 - 腳本驗(yàn)證的 git 命令
身份驗(yàn)證令牌保留在本地 git 配置中 - 支持SSH
- 創(chuàng)建本地分支
檢出分支時(shí)不再分離 HEAD - 改進(jìn)的布局
輸入path總是相對(duì)于 $GITHUB_WORKSPACE
與容器操作更好地對(duì)齊,其中 $GITHUB_WORKSPACE 被映射到 - 回退到 REST API 下載
當(dāng) PATH 中沒(méi)有 Git 2.18 或更高版本時(shí),將使用 REST API 下載文件
使用作業(yè)容器時(shí),使用容器的 PATH
4. 獲取token
根據(jù)GitHub提供的文檔生成密鑰,生成好后記得復(fù)制下來(lái),要不然再訪(fǎng)問(wèn)頁(yè)面的時(shí)候密鑰就不展示了。
# 生成密鑰時(shí)主要需要開(kāi)啟的權(quán)限有 1、rope 下所有權(quán)限 2、admin:repo_hook 下所有權(quán)限 3、delete_repo 下所有權(quán)限 # 主要是關(guān)于rope的權(quán)限,盡量都開(kāi)啟要使用Actions功能的倉(cāng)庫(kù)的Settings中的Secrets中新增一條
Name為:ACCESS_TOKEN Value為:剛才生成好的密鑰5. 示例
5.1 一條命令的action
下面是一個(gè)完整的 workflow 文件的范例。
name: Greeting from Mona on: pushjobs:my-job:name: My Jobruns-on: ubuntu-lateststeps:- name: Print a greetingenv:MY_VAR: Hi there! My name isFIRST_NAME: MonaMIDDLE_NAME: TheLAST_NAME: Octocatrun: |echo $MY_VAR $FIRST_NAME $MIDDLE_NAME $LAST_NAME.示例文件運(yùn)行截圖:
5.2 React 項(xiàng)目發(fā)布到 GitHub Pages
下面是一個(gè)實(shí)例,通過(guò) GitHub Actions 構(gòu)建一個(gè) React 項(xiàng)目,并發(fā)布到 GitHub Pages。最終代碼都在這個(gè)倉(cāng)庫(kù)里面,發(fā)布后的參考網(wǎng)址為ghostwritten.github.io/github-actions-demo
第一步:這個(gè)示例需要將構(gòu)建成果發(fā)到 GitHub 倉(cāng)庫(kù),因此需要 GitHub 密鑰。按照官方文檔,生成一個(gè)密鑰。然后,將這個(gè)密鑰儲(chǔ)存到當(dāng)前倉(cāng)庫(kù)的Settings/Secrets里面。
上圖是儲(chǔ)存秘密的環(huán)境變量的地方。環(huán)境變量的名字可以隨便起,這里用的是ACCESS_TOKEN。如果你不用這個(gè)名字,后面腳本里的變量名也要跟著改。
第二步:本地計(jì)算機(jī)使用create-react-app,生成一個(gè)標(biāo)準(zhǔn)的 React 應(yīng)用。
$ npx create-react-app github-actions-demo $ cd github-actions-demo然后,打開(kāi)package.json文件,加一個(gè)homepage字段,表示該應(yīng)用發(fā)布后的根目錄(參見(jiàn)官方文檔)。
"homepage": "https://[username].github.io/github-actions-demo",上面代碼中,將[username]替換成你的 GitHub 用戶(hù)名,參見(jiàn)范例。
第三步,在這個(gè)倉(cāng)庫(kù)的.github/workflows目錄,生成一個(gè) workflow 文件,名字可以隨便取,這個(gè)示例是ci.yml。
別人的 action:JamesIves/github-pages-deploy-action
name: Build and Deploy on:push:branches:- master jobs:build-and-deploy:runs-on: ubuntu-lateststeps:- name: Checkout 🛎?uses: actions/checkout@v1- name: Build and Deployuses: JamesIves/github-pages-deploy-action@releases/v2env:ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }} ## GitHub 密鑰 ACCESS_TOKEN 是在第二步Settings的Secrets中新增時(shí)定義的Name,要保持一致BASE_BRANCH: master # The branch the action should deploy from.BRANCH: gh-pages # The branch the action should deploy to.FOLDER: build # The folder the action should deploy.BUILD_SCRIPT: npm install && npm run-script build # The build script the action should run prior to deploying.上面這個(gè) workflow 文件的要點(diǎn)如下。
- 整個(gè)流程在master分支發(fā)生push事件時(shí)觸發(fā)。
- 只有一個(gè)job,運(yùn)行在虛擬機(jī)環(huán)境ubuntu-latest。
- 第一步是獲取源碼,使用的 action 是actions/checkout。
- 第二步是構(gòu)建和部署,使用的 action 是JamesIves/github-pages-deploy-action。
- 第二步需要四個(gè)環(huán)境變量,分別為 GitHub 密鑰、發(fā)布分支、構(gòu)建成果所在目錄、構(gòu)建腳本。其中,只有 GitHub密鑰是秘密變量,需要寫(xiě)在雙括號(hào)里面,其他三個(gè)都可以直接寫(xiě)在文件里。
第五步,保存上面的文件后,將整個(gè)倉(cāng)庫(kù)推送到 GitHub。GitHub 發(fā)現(xiàn)了 workflow 文件以后,就會(huì)自動(dòng)運(yùn)行。你可以在網(wǎng)站上實(shí)時(shí)查看運(yùn)行日志,日志默認(rèn)保存30天。
等到 workflow 運(yùn)行結(jié)束,訪(fǎng)問(wèn) GitHub Page,即https://ghostwritten.github.io/github-actions-demo,會(huì)看到構(gòu)建成果已經(jīng)發(fā)上網(wǎng)了。如果你想知道如何利用github搭建一個(gè)博客,請(qǐng)參考。因?yàn)槲业牟┛陀蛎麨閟moothies.com.cn,當(dāng)訪(fǎng)問(wèn)ghostwritten.github.io會(huì)自動(dòng)跳轉(zhuǎn)smoothies.com.cn。
以后,每次修改后推送源碼,GitHub Actions 都會(huì)自動(dòng)運(yùn)行,將構(gòu)建產(chǎn)物發(fā)布到網(wǎng)頁(yè)。
參考鏈接:
- https://jamesiv.es/
- https://github.com/JamesIves
- https://github.com/JamesIves/github-pages-deploy-action
- https://www.ruanyifeng.com/blog/2019/09/getting-started-with-github-actions.html
總結(jié)
以上是生活随笔為你收集整理的github action自动部署构建入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 小米安卓java模拟器手机版_Andro
- 下一篇: 保证速度与心情——pdg转pdf与djv