基本概念
Workflow :工作流程是可配置的自动化过程,可以运行一个或多个作业。它由一个或多个jobs构成,每个job由多个step构成,而每个step可以依次执行一个或多个action,
Event: 事件是存储库中发生的特定活动,触发工作流程运行。
Job: 在GitHub Actions中,Job是一个持续集成运行中的任务单元,代表一次持续集成的运行,可以完成多个任务。一个Workflow由一个或多个Jobs构成,而每个Job由多个Steps构成,一步步完成具体的操作。
Step:一步步的运行操作
Runners:运行器是在触发时运行工作流程的服务器。
触发条件
触发条件 有很多,可以是issue 创建,可以是 git 的 pr 和push ,可以是 定时器,全部的事件
on:
issues:
types:
- opened
- labeled
push:
branches:
- main
tags:
- v2
- v*
schedule:
# * is a special character in YAML so you have to quote this string
- cron: '30 5,17 * * *'
授权
在构建过程中,会读写一些内容,根据自己的需求设置权限,这里是全部的权限,可以在整个job中设置,也可以在每个 step 中设置
permissions:
actions: read|write|none
checks: read|write|none
contents: read|write|none
deployments: read|write|none
id-token: read|write|none
issues: read|write|none
discussions: read|write|none
packages: read|write|none
pages: read|write|none
pull-requests: read|write|none
repository-projects: read|write|none
security-events: read|write|none
statuses: read|write|none
permissions: write-all
条件
依赖条件
jobs:
job1:
job2:
needs: job1
job3:
needs: [job1, job2]
production-deploy:
if: github.repository == 'octo-org/octo-repo-prod'
runs-on: ubuntu-latest
steps:
- name: My first step
if: ${{ github.event_name == 'pull_request' && github.event.action == 'unassigned' }}
run: echo This event is a pull request that had an assignee removed.
运行时判断
name: Run a step if a secret has been set
on: push
jobs:
my-jobname:
runs-on: ubuntu-latest
env:
super_secret: ${{ secrets.SuperSecret }}
steps:
- if: ${{ env.super_secret != '' }}
run: echo 'This step will only run if the secret has a value set.'
- if: ${{ env.super_secret == '' }}
run: echo 'This step will only run if the secret does not have a value set.'
运行环境
jobname:
runs-on: [self-hosted, linux, x64, gpu]
可用的运行环境
ubuntu-latest , ubuntu-22.04 , ubuntu-20.04
|
The ubuntu-latest label currently uses the Ubuntu 22.04 runner image. |
windows-latest , windows-2022 , windows-2019
|
The windows-latest label currently uses the Windows 2022 runner image. |
macos-latest , macos-14 , macos-13 , macos-12 , macos-11
|
The macos-latest workflow label currently uses the macOS 14 runner image. |
steps:
- name: Display the path
shell: bash
run: echo $PATH
steps:
- name: Display the path
shell: python
run: |
import os
print(os.environ['PATH'])
组合环境
strategy:
matrix:
include:
- site: "production"
datacenter: "site-a"
- site: "staging"
datacenter: "site-b"
环境变量
environment:
name: production_environment
url: https://github.com
The value of url can be an expression. Allowed expression contexts: github, inputs, vars, needs, strategy, matrix, job, runner, and env. For more information about expressions,
使用公共的action
jobs:
my_first_job:
steps:
- name: My first step
# Uses the default branch of a public repository
uses: actions/heroku@main
- name: My second step
# Uses a specific version tag of a public repository
uses: actions/aws@v2.0.1
上传 构建产物
- uses: actions/upload-artifact@v3
if: matrix.os == 'ubuntu-latest'
with:
name: artifacts-${{ matrix.arch }}
path: |
./target/${{ matrix.target }}/release/bundle/appimage/**.AppImage.*
./target/${{ matrix.target }}/release/bundle/deb/**.deb
发布
- name: Create Release
uses: softprops/action-gh-release@master
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: v${{ env.version }}
name: ChatGPT v${{ env.version }}
body: See the assets to download this version and install.
prerelease: false
generate_release_notes: false
files: ./artifacts/**/*