GitHub Actions:从使用action操作到自定义action操作
  ndh0xMjNGcR6 2023年11月02日 34 0

利用GitHub Actions可以自动完成很多流水线任务,本文将介绍从使用action操作到自定义action操作

(目录)

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操作

文档

  • https://docs.github.com/zh/actions/creating-actions/creating-a-javascript-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、相关文章

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  X5zJxoD00Cah   2023年12月12日   17   0   0 Python.net
ndh0xMjNGcR6