githubaction常用记录

Posted by 梁远鹏 on 2023-05-05 | 阅读 |,阅读约 2 分钟

TOC

前言

记录有用的 github action 知识或问题,欢迎投稿:)

可重用的github action

这个应该是比较常见的,抽离共同的内容到一个 github action,传递参数执行不同的内容,比较常规的是构建特定版本镜像和构建 latest 版本镜像。

主要分为两部分:

被调用方

被调用自然就是重用的 github action,只需要声明是 workflow_call 就可以了,这样就能够被直接应用到 github action 当中,另一个相似的是 workflow_dispatch,能够以 API 的方式调用 github action。

...
on:
  workflow_call:
    inputs:
      tag:
        description: 'image tag'
        required: true
        type: string
    secrets:
      DOCKERHUB_USER_NAME:
        description: 'DOCKERHUB_USER_NAME'
        required: true
      DOCKERHUB_TOKEN:
        description: 'DOCKERHUB_TOKEN'
        required: true
...

上述是一个简单的示例,当被另一个 github action 调用时,必须提供一个 tag 传参 以及 DOCKERHUB_USER_NAME 和 DOCKERHUB_TOKEN 的 secret,用于构建特定版本的镜像以及 push 镜像。

调用方

调用时比较简单,直接使用 uses 关键字就可以了:

...
jobs:
  call_karmada_release_latest:
      uses: {owner}/{repo}/.github/workflows/karmada_release.yaml@main
      with:
        tag: latest
      secrets:
        DOCKERHUB_USER_NAME: ${{ secrets.DOCKERHUB_USER_NAME }}
        DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
...

上述是一个简单的例子,传递 latest 参数并且将需要的 secrets 传递到重用的 github action。

TODO output 以及和可重用 github action 的结合使用。

下载github action artifact

正常情况是在页面点击 github action 的 artifact 来下载,而网络不好的情况下这种方式就很难受了,这时可以通过请求 github api 的方式在一台网络良好的机器(无可视化界面/服务器)上下载 artifact了,文档在这里->https://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#download-an-artifact

使用 curl 请求原始API

curl -L \
  -H "Accept: application/vnd.github+json" \
  -H "Authorization: Bearer <YOUR-TOKEN>" \
  -H "X-GitHub-Api-Version: 2022-11-28" \
  https://api.github.com/repos/OWNER/REPO/actions/artifacts/ARTIFACT_ID/zip

只需要填写四个参数即可: API TOKEN OWNER REPO以及ARTIFACT_ID.

使用 gh 命令

gh run download -R {OWNER}/{REPO} {RUN_ID} -n {ARTIFACT_NAME}

被 github action 限制

我正在使用 github action 来构建 kubernetes kind node 容器镜像,正常使用了一段时间,某天突然不行了,github action workflow 总是被 cancel,最后在 Summary 看到如下提示:

build-kindnode- / release-release-1.28
Received request to deprovision: The request was cancelled by the remote provider.
build-kindnode- / release-master
Received request to deprovision: The request was cancelled by the remote provider.
build-kindnode- / release-release-1.30
Received request to deprovision: The request was cancelled by the remote provider.

快速 google 了一番,发现 2023 年也有人遇到过这个问题, Github action job is cancled by remote provider.,github 官方的人表示是因为使用的内存/CPU太多了.

但是我构建kubernetes kind node容器镜像应该也不会超过资源限制呀. (:

最后是将 kubernetes/kind 的构建 CPU 使用数量限制为2.

设置环境变量:

GOFLAGS: "-p=2"

微信公众号

扫描下面的二维码关注我们的微信公众号,第一时间查看最新内容。同时也可以关注我的Github,看看我都在了解什么技术,在页面底部可以找到我的Github。

wechat-qrcode

温馨提示

本文还在持续创作中,如果你对本文主题感兴趣可以加我微信好友进行催更,博客下方可以找到我的微信联系方式 :)