利用GitHub Actions可以自动完成很多流水线任务,本文将介绍从使用action操作到自定义action操作
目录
- 1、使用action操作
- 2、自定义action操作
- 1、准备好Node.js环境
- 2、初始化npm项目
- 3、安装依赖
- 4、元数据文件 action.yml
- 5、操作代码 index.js
- 6、代码发布
- 7、测试使用
- 8、action模板
- 9、问题
- 3、相关文章
1、使用action操作
文档
.github/workflows/github-actions-demo.yml
name: GitHub Actions Demo
run-name: ${{ github.actor }} is testing out GitHub Actions 🚀
on: [push]
jobs:
Explore-GitHub-Actions:
runs-on: ubuntu-latest
steps:
- run: echo "🎉 The job was automatically triggered by a ${{ github.event_name }} event."
- run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!"
- run: echo "🔎 The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}."
- name: Check out repository code
uses: actions/checkout@v3
- run: echo "💡 The ${{ github.repository }} repository has been cloned to the runner."
- run: echo "🖥️ The workflow is now ready to test your code on the runner."
- name: List files in the repository
run: |
ls ${{ github.workspace }}
- run: echo "🍏 This job's status is ${{ job.status }}."
定义了一个action操作,当代码推送的时候,触发运行,打印了一些环境信息
2、自定义action操作
文档
项目结构
$ tree -I node_modules
.
├── README.md
├── action.yml
├── dist
│ ├── index.js
│ └── licenses.txt
├── index.js
├── package-lock.json
├── package.json
└── pnpm-lock.yaml
1、准备好Node.js环境
$ node -v
v16.14.0
2、初始化npm项目
npm init -y
3、安装依赖
pnpm install @actions/core @actions/github @vercel/ncc
package.json
{
"name": "github-action",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"build": "ncc build index.js --license licenses.txt"
},
"dependencies": {
"@actions/core": "^1.10.0",
"@actions/github": "^5.1.1",
"@vercel/ncc": "^0.36.1"
}
}
4、元数据文件 action.yml
name: 'Hello World'
description: 'Greet someone and record the time'
inputs:
who-to-greet: # id of input
description: 'Who to greet'
required: true
default: 'World'
outputs:
time: # id of output
description: 'The time we greeted you'
runs:
using: 'node16'
main: 'dist/index.js'
以上代码,定义了元数据,指定了出入参数和输出参数,指定了运行入口,相当于一下两个步骤
(1)声明action接口
// ./dist/index.js
function {time} action ({who-to-greet}) {
// 执行操作
}
(2)执行action操作
$ node16 ./dist/index.js
5、操作代码 index.js
上面定义接口的实现
const core = require("@actions/core");
const github = require("@actions/github");
try {
// `who-to-greet` input defined in action metadata file
const nameToGreet = core.getInput("who-to-greet");
console.log(`Hello ${nameToGreet}!`);
const time = new Date().toTimeString();
core.setOutput("time", time);
// Get the JSON webhook payload for the event that triggered the workflow
const payload = JSON.stringify(github.context.payload, undefined, 2);
console.log(`The event payload: ${payload}`);
} catch (error) {
core.setFailed(error.message);
}
6、代码发布
提交到本地仓库后,添加标签,发布到github
# 打包编译
npm run build
# 提交代码
git add .
git commit -m 'add code'
# 打标签发布
git tag v1.1
git push --tag
7、测试使用
.github/workflows/main.yml
on: [push]
jobs:
hello_world_job:
runs-on: ubuntu-latest
name: A job to say hello
steps:
- name: Hello world action step
id: hello
uses: mouday/github-action@v1.1
with:
who-to-greet: 'Mona the Octocat'
# Use the output from the `hello` step
- name: Get the output time
run: echo "The time was ${{ steps.hello.outputs.time }}"
示例代码仓库地址:https://github.com/mouday/github-action
8、action模板
可以基于github提供的模板快速开发
可以参考他提供的项目模板进行开发
$ tree
.
├── CODEOWNERS
├── LICENSE
├── README.md
├── __tests__
│ └── main.test.ts
├── action.yml
├── dist
│ ├── index.js
│ ├── index.js.map
│ ├── licenses.txt
│ └── sourcemap-register.js
├── jest.config.js
├── package-lock.json
├── package.json
├── src
│ ├── main.ts
│ └── wait.ts
└── tsconfig.json
9、问题
问题1:Error: Cannot find module ‘@actions/core’
需要打包发布,不然会提示找不到模块
3、相关文章
- GitHub Actions 入门教程
- GitHub Actions 教程:定时发送天气邮件
- Python实战:GitHub Actions自动构建pypa/gh-action-pypi-publish自动发布新版本到pypi
- 利用workflows工作流Actions自动部署Vue项目Deploy to GitHub Pages
- Hexo-github-action自动部署
- Github Actions实现Npm包自动化发布
- Python实战:获取bing必应壁纸首页的每日一图(仅做学习用)
- git:github的tag标签基本使用和自动发布软件包