在当今的软件开发世界中,持续集成与持续部署(CI/CD)是一种常见的实践,它能帮助开发者更高效地构建、测试和发布软件。
GitHub Actions是GitHub平台提供的一种基于YAML配置的自动化工作流服务,可以在项目的构建、测试和发布等环节实现高度的自定义和控制。下面,我们将通过一些步骤和示例来展示如何使用GitHub Actions实现CICD。
集成,就是一些孤立的事物或元素通过某种方式集中在一起,产生联系,从而构建一个有机整体的过程。
持续,就是指长期的对项目代码进行集成。
持续集成是指将所有开发者工作副本每天多次合并到主干的做法。
持续集成强调开发人员提交了新代码之后,立刻进行构建、测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。
对于一个成熟的CICD管到来说,最后的阶段就是持续部署。作为持续交付——自动将生产就绪型构建版本发不到代码存储库的延伸。
一个最小化的持续集成系统需要包含以下几个要素:
一、创建GitHub Actions
首先,你需要在你的GitHub项目中创建一个新的Actions文件,通常这个文件名为main.yml
。这个文件定义了一个工作流,工作流是由一系列的步骤组成的。
以下是一个简单的示例,它演示了如何使用GitHub Actions在每次push到master分支时触发一个构建和部署流程:
name: CI/CD Pipeline
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
name: Build and Test
steps:
- name: Checkout Code
uses: actions/checkout@v2
- name: Set up JDK
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Build and Test
run: mvn clean install
二、配置触发器
在on
部分,你可以配置触发器来启动工作流。上面的例子中,我们在push到master分支或pull request修改master分支时触发工作流。
三、定义工作流
在jobs
部分,我们定义了一个名为build
的工作流,它包含三个步骤:Checkout Code、Set up JDK和Build and Test。这个工作流会先检出代码,然后设置JDK版本,最后运行构建和测试命令。
四、部署
部署的部分通常会涉及到更多的步骤,例如将构建的结果部署到一个预生产环境或者生产环境。这通常涉及到创建Docker镜像,将镜像推送到Docker registry,并创建一个Kubernetes deployment。以下是一个简单的部署示例:
# Sample workflow for building and deploying a Hugo site to GitHub Pages
name: Deploy wisdomwindy site pages
on:
# Runs on pushes targeting the default branch
push:
branches: [$default_branch]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
# Build job
build:
runs-on: ubuntu-latest
steps:
# 检出代码
- name: checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Git Configuration
run: |
git config --global core.quotePath false
git config --global core.autocrlf false
git config --global core.safecrlf true
git config --global core.ignorecase false
# 安装 PNPM
- name: setup PNPM
uses: pnpm/action-setup@v2
with:
version: latest
# 安装 node
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: 18.18.1
registry-url: https://registry.npmjs.org
cache: pnpm
# 安装依赖
- name: Install dependencies
run: pnpm i --frozen-lockfile
# 打包
- name: Build
run: pnpm build
# 部署
- name: Deploy GitHub Pages
uses: JamesIves/github-pages-deploy-action@v4
with:
branch: pages
folder: docs
如果出现The deploy step encountered an error: The process '/usr/bin/git' failed with
错误,在当前项目仓库的settings页面中点击actions,选中general,在Fork pull request workflows from outside collaborators
配置项中选中第一个,在Workflow permissions
配置项中选中第一个,且在yml配置文件中不能再次设置权限。