持续集成与部署(二):持续集成1-巧用 Github Actions

简介: 持续集成与部署(二):持续集成1-巧用 Github Actions

1. GitHub Actions 是什么?

GitHub ActionsGitHub 于 2018 年 10 月推出的一个 CI\CD 服务(持续集成和持续部署)。简单明了的说 就是你可以给你的代码仓库部署一系列自动化脚本,在你进行了提交/合并分支等操作后,自动执行脚本。

通过 GitHub Actions 可快速搭建 GitHub Pages 静态网站(域名为 http://[username].github.io ),使用它来发布、测试、部署,是非常方便的

大家知道,持续集成由很多操作组成,比如抓取代码、运行测试、登录远程服务器,发布到第三方服务等等。GitHub 把这些操作就称为 actions。 很多操作在不同项目里面是类似的,完全可以共享。GitHub 注意到了这一点,想出了一个很妙的点子,允许开发者把每个操作写成独立的脚本文件,存放到代码仓库,使得其他开发者可以引用。 如果你需要某个 action,不必自己写复杂的脚本,直接引用他人写好的 action 即可,整个持续集成过程,就变成了一个 actions 的组合。这就是 GitHub Actions 最特别的地方。

2. Github Actions 概念

GitHub Actions 有一些自己的术语。

  1. workflow (工作流程):持续集成一次运行的过程,就是一个 workflow
  2. job (任务):一个 workflow 由一个或多个 jobs 构成,含义是一次持续集成的运行,可以完成多个任务。
  3. step(步骤):每个 job 由多个 step 构成,一步步完成。
  4. action (动作):每个 step 可以依次执行一个或多个命令(action)。

3. workflow 文件

GitHub Actions 的配置文件叫做 workflow 文件,存放在代码仓库的 .github/workflows目录。

workflow 文件采用 YAML 格式,文件名可以任意取,但是后缀名统一为 .yml ,比如foo.yml。一个库可以有多个 workflow 文件。GitHub 只要发现 .github/workflows目录里面有 .yml 文件,就会自动运行该文件。

workflow 文件的配置字段非常多,详见 官方文档一些基本字段。

(1)name

name字段是 workflow 的名称。如果省略该字段,默认为当前 workflow 的文件名。

name: GitHub Actions Demo

(2) on
on字段指定触发 workflow 的条件,通常是某些事件。

on: push

上面代码指定,push事件触发 workflow

on字段也可以是事件的数组。

on: [push, pull_request]

上面代码指定,push事件或 pull_request 事件都可以触发 workflow

完整的事件列表,请查看 官方文档 。除了代码库事件,GitHub Actions 也支持外部事件触发,或者定时运行。

(3) on.<push|pull_request>.<tags|branches>

指定触发事件时,可以限定分支或标签。

on:
  push:
    branches:    
      - master

上面代码指定,只有 master 分支发生 push 事件时,才会触发 workflow

(4) jobs.<job_id>.name

workflow 文件的主体是 jobs 字段,表示要执行的一项或多项任务。

jobs 字段里面,需要写出每一项任务的 job_id,具体名称自定义。job_id里面的name字段是任务的说明。

jobs:
  my_first_job:
    name: My first job
  my_second_job:
    name: My second job

上面代码的 jobs 字段包含两项任务,job_id 分别是 my_first_jobmy_second_job

(5) jobs.<job_id>.needs

needs 字段指定当前任务的依赖关系,即运行顺序。

jobs:
  job1:
  job2:
    needs: job1
  job3:
    needs: [job1, job2]

上面代码中,job1 必须先于 job2 完成,而 job3 等待 job1job2 的完成才能运行。因此,这个 workflow 的运行顺序依次为:job1job2job3

(6) jobs.<job_id>.runs-on
runs-on字段指定运行所需要的虚拟机环境。它是必填字段。目前可用的虚拟机如下。

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

下面代码指定虚拟机环境为 ubuntu-18.04

runs-on: ubuntu-18.04

(7) jobs.<job_id>.steps

steps 字段指定每个 Job 的运行步骤,可以包含一个或多个步骤。每个步骤都可以指定以下三个字段。

  • jobs.<job_id>.steps.name:步骤名称。
  • jobs.<job_id>.steps.run:该步骤运行的命令或者 action。
  • jobs.<job_id>.steps.env:该步骤所需的环境变量。

下面是一个完整的 workflow 文件的范例。

name: Greeting from Mona
on: push

jobs:
  my-job:
    name: My Job
    runs-on: ubuntu-latest
    steps:
    - name: Print a greeting
      env:
        MY_VAR: Hi there! My name is
        FIRST_NAME: Mona
        MIDDLE_NAME: The
        LAST_NAME: Octocat
      run: |
        echo $MY_VAR $FIRST_NAME $MIDDLE_NAME $LAST_NAME.

上面代码中,steps字段只包括一个步骤。该步骤先注入四个环境变量,然后执行一条 Bash 命令。

4. 实例:React 项目发布到 GitHub Pages

(1) 第一件事情是我们需要先创建一个 GitHub 密钥,因为我们需要将示例部署至 Github Page ,需要写权限,创建完成后将这个秘钥保存在当前仓库的 Settings/Secrets 里面。

创建秘钥可以参考 官方文档

点击自己头像,选择 Settings

image.png

在左边栏选择 Developer settings

image.png

然后在左边栏选择 Personal access tokens 点击头上的 Generate new token 创建一个新的 Token

image.png

注意: 创建完成后需要保存好这个 Token ,它只会出现这一次。

接下来,在github中创建一个项目,我这里创建的名字叫做 github-actions-demo ,然后点击项目中的 Settings ,在 Secrets 的栏目中的 Actions, 点击右上角的New repository secret,将刚才创建的 Token 填写进去:

image.png

(2) 接下来是创建一个标准的 React 应用:

npx create-react-app github-actions-demo

(3) 打开项目中的package.json文件,添加一个homepage字段,如下:

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

将[username]替换成你自己的 GitHub 用户名

(4) 在个人代码仓库中找到 action,如果你是一个前端项目,可以使用 Node.js 的模板,点击 new workflow ,生产 workflow 文件

image.png

image.png

或者 这个项目中,在 .github/workflows 的目录中手动新增一个 workflow 文件,名字可以随便取,这个我这里的名称是 ci.yml

(5) 我们来看看Github Action配置文件的基本构成,配置文件格式是.yml,示例如下:

name: GitHub Actions Build and Deploy Demo
on:
  push:
    branches:
      - master
jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout
      uses: actions/checkout@v2 # If you're using actions/checkout@v2 you must set persist-credentials to false in most cases for the deployment to work correctly.
      with:
        persist-credentials: false
    - name: Install and Build
      run: |
        npm install
        npm run-script build
    - name: Deploy
      uses: JamesIves/github-pages-deploy-action@releases/v3
      with:
        ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
        BRANCH: gh-pages
        FOLDER: build

上面这个 workflow 文件的要点如下。

  1. 整个流程在 master 分支发生 push 事件时触发。
  2. 只有一个 job ,运行在虚拟机环境 ubuntu-latest
  3. 第一步是获取源码,使用的 actionactions/checkout@v2 。如果用的是这个版本必须得加上 persist-credentials:false
  4. 第二步是构建,使用npm install npm run-script build命令。
  5. 第三步是部署,使用的 actionJamesIves/github-pages-deploy-action@releases/v3
  6. 第三步需要三个环境变量,分别为 GitHub 密钥、发布分支、构建成果所在目录、构建脚本。其中,只有 GitHub 密钥是秘密变量(就是之前配置的变量),需要写在双括号里面,其他三个都可以直接写在文件里。

(6) 保存上面的文件后,将整个仓库推送到 GitHub

GitHub 发现了 workflow 文件以后,就会自动运行。你可以在网站上实时查看运行日志,日志默认保存30天。

image.png

(7) 在setting中设置一下Github Page

image.png

等到项目部署成功后,访问 GitHub Page,会看到构建成果已经发上网了。然后每次推送到 mater 分支,Github Action 都会自动运行,将构建产物发布至 Github Page

image.png

相关文章
|
3月前
|
开发工具 git
Playwright系列(6):如何集成到GitHub
Playwright系列(6):如何集成到GitHub
Playwright系列(6):如何集成到GitHub
|
1月前
GitHub和Gitee的基本使用和在IDEA中的集成
GitHub和Gitee的基本使用和在IDEA中的集成
26 0
|
3月前
|
关系型数据库 Java Nacos
Seata的部署和集成
部署Seata的tc-server
|
17天前
|
存储 安全 Serverless
用 Github Actions 自动部署阿里云函数计算 FC
介绍了如何配置阿里云函数计算(FC)与GitHub Actions集成以实现自动部署。首先在阿里云创建函数,然后在项目根目录创建`s.yaml`文件配置Serverless Devs。接着在GitHub仓库中设置 Secrets 存储阿里云账号信息,并创建名为`aliyun-fc-deploy.yaml`的工作流文件来定义GitHub Actions。当代码推送到`master`分支时,Actions会自动部署到函数计算。最后,成功配置后,提交代码会触发自动部署,并可在GitHub Actions和阿里云控制台查看部署状态。
409 3
|
1月前
|
Kubernetes 测试技术 持续交付
探索微服务架构下的持续集成与部署最佳实践
本文将深入探讨在微服务架构下实施持续集成与部署的最佳实践,介绍如何利用现代化工具和流程来实现自动化测试、持续集成、灰度发布等关键环节,帮助开发团队提升交付效率和质量。
|
2月前
|
监控 Java 持续交付
内部网络监控软件的Groovy应用:持续集成与部署的自动化监控
在当今高度数字化的环境中,对于内部网络的监控变得至关重要。为了保证系统的稳定性和安全性,监控软件的自动化变得越来越必要。本文将介绍如何利用Groovy编程语言实现持续集成与部署的自动化内部网络监控软件,并通过代码示例展示其实现方式。
269 3
|
2月前
|
安全 Shell 网络安全
Git学习---Git快速入门、Git基础使用、Git进阶使用、Git服务器使用(IDEA集成GitHub、Gitee、GitLab)、GitHub Desktop客户端
Git学习---Git快速入门、Git基础使用、Git进阶使用、Git服务器使用(IDEA集成GitHub、Gitee、GitLab)、GitHub Desktop客户端
131 0
|
3月前
|
存储
github pages 部署单页面
github pages 部署单页面
53 0
|
3月前
|
JavaScript Ubuntu 网络安全
使用github actions,将私有仓库的构建文件发布到另一个公开仓库,并同步到gitee
使用github actions,将私有仓库的构建文件发布到另一个公开仓库,并同步到gitee
96 0
|
4月前
|
jenkins 测试技术 持续交付
深入理解CI/CD与Docker集成:自动化构建和部署的完整指南
在当今软件开发的快节奏环境中,自动化构建和部署是实现敏捷开发和DevOps实践的关键。Docker容器技术为这一过程引入了更高的灵活性和一致性。本文将深入研究如何将持续集成/持续部署(CI/CD)与Docker集成,提供更详细、实用的示例代码,以帮助大家全面了解并成功应用这一重要的DevOps实践。