日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

github action自动部署构建入门

發布時間:2023/12/10 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 github action自动部署构建入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Github Action自動部署構建

文章目錄

  • Github Action自動部署構建
    • 1. 簡介
    • 2. 基礎概念
    • 3. workflow 文件
      • 3.1 觸發事件
      • 3.2 job任務
      • 3.3 運行主機環境
      • 3.4 運行步驟
      • 3.5 引用action
      • 3.6 顯示workflow status
      • 3.7 with傳參
      • 3.8 env環境變量
      • 3.9 secrets引用
      • 3.10 action/checkout檢查
    • 4. 獲取token
    • 5. 示例
      • 5.1 一條命令的action
      • 5.2 React 項目發布到 GitHub Pages


1. 簡介

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

GitHub Actions 幫助您自動完成軟件開發周期內的任務。 GitHub Actions 是事件驅動的,意味著您可以在指定事件發生后運行一系列命令。

工作流程是您添加到倉庫的自動化過程。 工作流程由一項或多項作業組成,可以計劃或由事件觸發。 工作流程可用于在 GitHub 上構建、測試、打包、發布或部署項目。

GitHub 官方市場,我們除了自己編寫action,也可以借用別人的。

每個 action 就是一個獨立腳本,因此可以做成代碼倉庫,使用userName/repoName的語法引用 action。比如,actions/setup-node就表示github.com/actions/setup-node這個倉庫,它代表一個 action,作用是安裝 Node.js。事實上,GitHub 官方的 actions 都放在 github.com/actions 里面。

actions 也有版本的概念,下面都是合法的 action 引用,用的就是 Git 的指針概念,詳見官方文檔。

actions/setup-node@74bc508 # 指向一個 commit actions/setup-node@v1.0 # 指向一個標簽 actions/setup-node@master # 指向一個分支

2. 基礎概念

  • workflow (工作流程):持續集成一次運行的過程,就是一個 workflow。
  • job (任務):一個 workflow 由一個或多個 jobs 構成,含義是一次持續集成的運行,可以完成多個任務;
  • step(步驟):每個 job 由多個 step 構成,一步步完成。
  • action (動作):每個 step 可以依次執行一個或多個命令(action)。
  • GitHub Ac-tions 為每個任務 (job) 都提供了一個虛擬機來執行,每臺虛擬機都有相同的硬件資源:

    • 2-core CPU
    • 7 GB RAM 內存
    • 14 GB SSD 硬盤空間

    使用限制:

    • 每個倉庫只能同時支持20個 workflow 并行。
    • 每小時可以調用1000次 GitHub API 。
    • 每個 job 最多可以執行6個小時。
    • 免費版的用戶最大支持20個 job 并發執行,macOS 最大只支持5個。
    • 私有倉庫每月累計使用時間為2000分鐘,超過后$ 0.008/分鐘,公共倉庫則無限制。

    操作系統方面可選擇 Win-dows server、Linux、ma-cOS,并預裝了大量軟件包和工具。
    雖然名稱叫持續集成,但當所有任務終止和完成時,虛擬環境內的數據會隨之清空,并不會持續。即每個新任務都是一個全新的虛擬環境。

    3. workflow 文件

    GitHub Ac-tions 的配置文件叫做 work-flow 文件(官方中文翻譯為 “工作流程文件”),存放在代碼倉庫的.github/workflows 目錄中。work-flow 文件采用 YAML 格式,文件名可以任意取,但是后綴名統一為.yml,比如 p3terx.yml。一個庫可以有多個 work-flow 文件,GitHub 只要發現.github/workflows 目錄里面有.yml 文件,就會按照文件中所指定的觸發條件在符合條件時自動運行該文件中的工作流程。在 Ac-tions 頁面可以看到很多種語言的 work-flow 文件的模版,可以用于簡單的構建與測試。


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

    #name字段是 workflow 的名稱。如果省略該字段,默認為當前 workflow 的文件名。 name: GitHub Actions Demo

    3.1 觸發事件

    #push事件觸發 workflow。 on: push#on字段也可以是事件的數組。`push`事件或`pull_request`事件都可以觸發 `workflow`。 on: [push, pull_request] #只有`master`分支發生`push`事件時,才會觸發 workflow on:push:branches: - master #push tag 時觸發 on:push:tags:- 'v*'#發布 re-lease 觸發 on:release:types: [published]定時觸發on:schedule:- cron: '0 * * * *'

    3.2 job任務

    workflow 文件的主體是jobs字段,表示要執行的一項或多項任務。
    jobs字段里面,需要寫出每一項任務的job_id,具體名稱自定義。job_id里面的name字段是任務的說明。

    #job_id分別是my_first_job和my_second_job jobs:my_first_job:name: My first jobmy_second_job:name: My second job #`needs`字段指定當前任務的依賴關系,即運行順序。`job1`必須先于job2完成,而job3等待`job1`和`job2`的完成才能運行 #因此,這個 workflow 的運行順序依次為:`job1、job2、job3`。 jobs:job1:job2:needs: job1job3:needs: [job1, job2]

    3.3 運行主機環境

    runs-on字段指定運行所需要的虛擬機環境。它是必填字段。目前可用的虛擬機如下。

    ubuntu-latest,ubuntu-18.04或ubuntu-16.04 windows-latest,windows-2019或windows-2016 macOS-latest或macOS-10.14 runs-on: ubuntu-18.04

    3.4 運行步驟

    #`steps`字段指定每個 `Job` 的運行步驟,可以包含一個或多個步驟。每個步驟都可以指定以下三個字段。 jobs.<job_id>.steps.name:步驟名稱。 jobs.<job_id>.steps.run:該步驟運行的命令或者 action。 jobs.<job_id>.steps.env:該步驟所需的環境變量。 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: bash

    3.6 顯示workflow status

    ![](https://github.com/actions/hello-world/workflows/Greet Everyone/badge.svg)

    3.7 with傳參

    firstname ,會被轉化為INPUTFIRST_NAME使用

    jobs:my_first_job:steps:- name: My first stepuses: actions/hello_world@masterwith:first_name: Monamiddle_name: Thelast_name: Octocat

    3.8 env環境變量

    steps:- name: Hello worldrun: echo Hello world $FIRST_NAME $middle_name $Last_Name!env:FIRST_NAME: Monamiddle_name: TheLast_Name: Octocat

    3.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

    最新版本特性:

    • 提高性能
      默認情況下只獲取一個提交
    • 腳本驗證的 git 命令
      身份驗證令牌保留在本地 git 配置中
    • 支持SSH
    • 創建本地分支
      檢出分支時不再分離 HEAD
    • 改進的布局
      輸入path總是相對于 $GITHUB_WORKSPACE
      與容器操作更好地對齊,其中 $GITHUB_WORKSPACE 被映射到
    • 回退到 REST API 下載
      當 PATH 中沒有 Git 2.18 或更高版本時,將使用 REST API 下載文件
      使用作業容器時,使用容器的 PATH

    4. 獲取token

    根據GitHub提供的文檔生成密鑰,生成好后記得復制下來,要不然再訪問頁面的時候密鑰就不展示了。

    # 生成密鑰時主要需要開啟的權限有 1、rope 下所有權限 2、admin:repo_hook 下所有權限 3、delete_repo 下所有權限 # 主要是關于rope的權限,盡量都開啟

    要使用Actions功能的倉庫的Settings中的Secrets中新增一條

    Name為:ACCESS_TOKEN Value為:剛才生成好的密鑰

    5. 示例

    5.1 一條命令的action

    下面是一個完整的 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.

    示例文件運行截圖:

    5.2 React 項目發布到 GitHub Pages

    下面是一個實例,通過 GitHub Actions 構建一個 React 項目,并發布到 GitHub Pages。最終代碼都在這個倉庫里面,發布后的參考網址為ghostwritten.github.io/github-actions-demo

    第一步:這個示例需要將構建成果發到 GitHub 倉庫,因此需要 GitHub 密鑰。按照官方文檔,生成一個密鑰。然后,將這個密鑰儲存到當前倉庫的Settings/Secrets里面。

    上圖是儲存秘密的環境變量的地方。環境變量的名字可以隨便起,這里用的是ACCESS_TOKEN。如果你不用這個名字,后面腳本里的變量名也要跟著改。

    第二步:本地計算機使用create-react-app,生成一個標準的 React 應用。

    $ npx create-react-app github-actions-demo $ cd github-actions-demo

    然后,打開package.json文件,加一個homepage字段,表示該應用發布后的根目錄(參見官方文檔)。

    "homepage": "https://[username].github.io/github-actions-demo",

    上面代碼中,將[username]替換成你的 GitHub 用戶名,參見范例。

    第三步,在這個倉庫的.github/workflows目錄,生成一個 workflow 文件,名字可以隨便取,這個示例是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中新增時定義的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.

    上面這個 workflow 文件的要點如下。

    • 整個流程在master分支發生push事件時觸發。
    • 只有一個job,運行在虛擬機環境ubuntu-latest。
    • 第一步是獲取源碼,使用的 action 是actions/checkout。
    • 第二步是構建和部署,使用的 action 是JamesIves/github-pages-deploy-action。
    • 第二步需要四個環境變量,分別為 GitHub 密鑰、發布分支、構建成果所在目錄、構建腳本。其中,只有 GitHub密鑰是秘密變量,需要寫在雙括號里面,其他三個都可以直接寫在文件里。

    第五步,保存上面的文件后,將整個倉庫推送到 GitHub。GitHub 發現了 workflow 文件以后,就會自動運行。你可以在網站上實時查看運行日志,日志默認保存30天。

    等到 workflow 運行結束,訪問 GitHub Page,即https://ghostwritten.github.io/github-actions-demo,會看到構建成果已經發上網了。如果你想知道如何利用github搭建一個博客,請參考。因為我的博客域名為smoothies.com.cn,當訪問ghostwritten.github.io會自動跳轉smoothies.com.cn。

    以后,每次修改后推送源碼,GitHub Actions 都會自動運行,將構建產物發布到網頁。

    參考鏈接:

    • 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

    總結

    以上是生活随笔為你收集整理的github action自动部署构建入门的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。