这篇文章上次修改于 1747 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

突然想试用caddy2,但是caddy2没有caddy1的下载页面来方便下载,要用插件就需要自己编译。(已经有了)

但是大局域网的原因,本地编译一言难尽,之前一直是去vultr开个vps编译完就删除,这次突然就想试试 GitHub Actions。

看了下文档,再搜索一下,折腾了一会也算是可以使用了。


使用xcaddy编译caddy2的完整示例

先放示例文件:


点击此处展开示例配置文件

name: Build caddy-linux-amd64

on:
  push:
    paths:
      - 'caddy-linux-amd64.md'

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: install go
      uses: actions/setup-go@master
    
    - name: install xcaddy
      run: |
        tag_name=`curl -s https://api.github.com/repos/caddyserver/xcaddy/releases | grep 'tag_name' | sed -n '1p' | cut -d\" -f4`
        wget -O ./xcaddy https://github.com/caddyserver/xcaddy/releases/download/${tag_name}/xcaddy_${tag_name}_linux_amd64
        chmod 777 ./xcaddy

    - name: build caddy
      run: |
        export GOARCH=amd64
        export GOOS=linux
        ./xcaddy build \
          --with github.com/mholt/caddy-webdav

    - name: upload
      uses: actions/upload-artifact@master
      with:
        name: caddy-linux-amd64
        path: ./caddy


建立新的仓库 GitHub-Actions

因为只是想借用 GitHub Actions 编译一些自己的东西 ,所以是单独建立了个GitHub-Actions仓库来使用。

配置工作流程文件

关于工作流程的 YAML 语法

工作流程文件使用 YAML 语法,必须有 .yml.yaml 文件扩展名。 如果您是 YAML 的新用户并想要了解更多信息,请参阅“五分钟了解 YAML”。

必须将工作流程文件存储在仓库的 .github/workflows 目录中。

这里是要用来编译caddy2,所以在.github/workflows下创建文件caddy-linux-amd64.yml
工作流程文件由多个部分组成,这里只用到3个,分别为:name,on,jobs

name工作流程的名称
on触发工作流程的 GitHub 事件的名称,可以是单一或多个
jobs作业,工作流程运行包括一项或多项作业

name

这里就直接写

name: Build caddy-linux-amd64

on

由于这里只是想借用 GitHub Actions 编译 caddy ,所以并不想随意触发该工作流程,考虑后设定为提交caddy-linux-amd64.md才会触发,caddy-linux-amd64.md则用来记录触发编译时的相关信息。

on:
  push:
    paths:
        - 'caddy-linux-amd64.md'

jobs

jobs由一项或多项作业组成,默认是并行运行。需要为每个作业指定<job_id>,每个作业里同样由多个部分组成,其中最常用也也这里只用到的两项为runs-on: 运行作业的机器类型steps: 步骤

jobs:
  <job_id_1>:
    runs-on: 
    steps:
      .
      .
      .
  <job_id_2>:
    runs-on: 
    steps:
      .
      .
      .

这里只用来编译caddy,所以只需要一个作业,不用考虑运行顺序问题。

runs-on

其中 runs-on 支持的列表为:

虚拟环境YAML 工作流程标签
Windows Server 2019windows-latest 或 windows-2019
Ubuntu 20.04ubuntu-20.04
Ubuntu 18.04ubuntu-latest 或 ubuntu-18.04
Ubuntu 16.04ubuntu-16.04
macOS Catalina 10.15macos-latest 或 macos-10.15

这里选择ubuntu-latest

steps

steps包含一系列的步骤,可以用- id:- name:分开多个部分,这里只用- name:

steps:
- name: <steps_1>
  run:
    .
    .
    .
- name: <steps_2>
  run:
    .
    .
    .

upload-artifact

需要获取编译好的文件,所以最后需要用到actions/upload-artifact。特别要注意的是上传到Artifacts的文件只会保留90天,而且私有仓库只有500Mb的限额,超出要收费。详情见“关于 GitHub 操作 的计费

- name: upload
  uses: actions/upload-artifact@master
  with:
    name: caddy #上传后的文件名
    path: ./caddy #可以指定文件和文件夹,支持通配符

官方文档:https://docs.github.com/cn/actions
参考资料: