持续集成与部署(二):持续集成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月前
|
Java Maven Docker
gitlab-ci 集成 k3s 部署spring boot 应用
gitlab-ci 集成 k3s 部署spring boot 应用
|
2月前
|
存储 Linux 数据安全/隐私保护
一键部署 200+ 开源Github 2k+ 星星的软件
Websoft9面板是一款基于Web的PaaS/Linux面板,支持在个人服务器上一键部署200多种热门开源应用,适用于个人开发者、中小企业、创业团队、教育机构和技术爱好者。它集成了丰富的开源软件,提供便捷的部署方式、高效的资源利用、良好的可扩展性及低技术门槛,帮助用户快速搭建和管理各类应用。
|
3月前
|
运维 监控 Devops
DevOps实践:持续集成与部署的自动化之旅
【10月更文挑战第7天】在软件开发领域,DevOps已成为提升效率、加速交付和确保质量的关键策略。本文将深入探讨如何通过实施持续集成(CI)和持续部署(CD)来自动化开发流程,从而优化运维工作。我们将从基础概念入手,逐步过渡到实际操作,包括工具选择、流程设计以及监控和反馈机制的建立。最终,我们不仅会展示如何实现这一自动化流程,还会讨论如何克服常见的挑战,以确保成功实施。
78 9
|
3月前
|
JavaScript API 开发工具
使用GitHub Actions自动发布electron多端安装程序
使用GitHub Actions自动发布electron多端安装程序
71 8
|
3月前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
105 0
|
3月前
|
监控 Devops 测试技术
DevOps实践:持续集成与部署的自动化之路
【9月更文挑战第30天】在软件工程的世界中,DevOps已成为提升开发效率、确保软件质量和加快交付速度的关键策略。本文将深入探讨如何通过自动化工具和流程实现持续集成(CI)与持续部署(CD),从而优化软件开发周期。我们将从基础概念出发,逐步深入到实际操作,最终展示如何构建一个高效的自动化流水线,以支持快速迭代和高质量发布。
70 7
|
4月前
|
Devops jenkins Java
DevOps实践:持续集成和部署的自动化之旅
【9月更文挑战第20天】在软件开发的世界里,速度和质量是至关重要的。本文将带领读者踏上一场自动化之旅,深入探索DevOps文化中的两大支柱——持续集成(CI)和持续部署(CD)。我们将通过一个实际的案例,展示如何利用现代工具和技术实现代码从编写到部署的无缝转换,确保软件交付的高效性和可靠性。准备好让你的开发流程变得更加流畅和高效了吗?让我们开始吧!
利用 GitHub Actions 自动化你的软件开发流程
GitHub Actions 是由 GitHub 提供的自动化工具,可让你在仓库中触发和执行自动化工作流程,如自动运行测试和部署应用。其核心概念包括工作流程(定义在 YAML 文件中的一系列自动化步骤)、作业和步骤。本文将指导你如何设置和使用 GitHub Actions,并提供实用的自动化示例,帮助你提高开发效率和代码质量。通过简单的配置文件,你可以实现自动运行测试、部署应用甚至自动合并 Pull Requests。
|
3月前
|
安全 Java 测试技术
ToB项目身份认证AD集成(二):快速搞定window server 2003部署AD域服务并支持ssl
本文详细介绍了如何搭建本地AD域控测试环境,包括安装AD域服务、测试LDAP接口及配置LDAPS的过程。通过运行自签名证书生成脚本和手动部署证书,实现安全的SSL连接,适用于ToB项目的身份认证集成。文中还提供了相关系列文章链接,便于读者深入了解AD和LDAP的基础知识。
100 0
|
4月前
|
网络协议 开发工具 git
hexo github部署,通过域名访问你的博客
本文介绍了如何使用Hexo命令部署博客到GitHub,并详细说明了如何通过自定义域名访问GitHub上部署的博客。
hexo github部署,通过域名访问你的博客

热门文章

最新文章