是什么?#
GitHub 推出的持续集成 (Continuous integration,简称 CI) 服务,它提供了配置非常不错的虚拟服务器环境,基于它可以进行构建、测试、打包、部署项目。
github 利用仓库下的配置文件,根据配置文件的触发时机(例如:push、pull requests)执行配置文件的流程(例如:打包、部署)。
配置文件#
基本概念#
workflows(工作流程):续集成一次运行的过程,就是一个 workflow。 job (任务):一个 workflow 由一个或多个 jobs 构成,含义是一次持续集成的运行,可以完成多个任务。 step(步骤):每个 job 由多个 step 构成,一步步完成。 action (动作):每个 step 可以依次执行一个或多个命令(action)。
workflow 文件#
位置:存放在代码仓库的 .github/workflows 目录。
workflow 文件采用 YAML 格式,文件名可以任意取,但是后缀名统一为 .yml,比如 ci.yml。一个库可以有多个 workflow 文件。GitHub 只要发现 .github/workflows 目录里面有 .yml 文件,就会自动运行该文件。
name: Demo # workflow 的名称,默认为文件名。
on: push # 触发时机,例如:push。多个是为[push, pull_request]on: push: branches: - master # 限制触发分支
jobs: job1: name: 任务说明 runs-on: ubuntu-latest # 运行环境,具体选项可根据 github 提供配置的填写 https://docs.github.com/cn/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources 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. job2: needs: job1 job3: needs: [job1, job2] # 运行顺序,job1 > job2 > job3
node
name: qa build and uploadon: push: branches: [ master ] pull_request: branches: [ master ]jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 # 拉取代码 - uses: actions/setup-node@v3 # 设置 node with: node-version: 16 cache: "npm" - run: npm install && rm -rf ./dist && npm run build:qa - name: copy file uses: appleboy/scp-action@master with: host: ${{ secrets.HOST }} username: ${{ secrets.USERNAME }} port: ${{ secrets.PORT }} key: ${{ secrets.KEY }} source: "dist" rm: true target: "/home/lane/qa-lane-web"
java
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 # 拉取代码 - name: Set up JDK 8 uses: actions/setup-java@master with: java-version: 8 distribution: 'adopt' cache: maven - name: Build with Maven # 打包命令 run: mvn clean package --file pom.xml - name: Deploy uses: appleboy/ssh-action@master with: host: ${{ secrets.HOST }} username: ${{ secrets.USERNAME }} key: ${{ secrets.KEY }} port: ${{ secrets.PORT }} script: | whoami ls -all
参考#
GitHub Actions 入门教程 https://www.ruanyifeng.com/blog/2019/09/getting-started-with-github-actions.html Github Action https://github.com/features/actions 官方中文文档 https://docs.github.com/cn/actions/using-workflows/about-workflows