gitea-runner-当前站点的发布实践

当前站点正在使用的一套的集成流程

本站点历史发布模式

早期的脚本模式

  1. 本地编写好 MD 文件
  2. 执行 hugo 命令, 构建 WEB静态文件
  3. scp 传输到目标主机上

将上述流程脚本化

前期-drone

前期采用 drone 进行的自动化编译和部署,参考另一篇单独介绍的文章。
drone无人机-当前站点的发布实践

当前-gitea-runner

我又又又又决定再学一学 ts 了,没办法,搞这个 action 始终绕不过去 js 这一套东西, 虽然单纯的只用 docker 也不是不可以。但是很多既有的 action 也就没法用了。会点 js 至少还能拿来改一改吧。

实际工作流文件

真私有化部署, 不涉及 github 的访问;

流程中存在的问题

  1. 没有使用 js 类型的 action,太可惜了,后面得补一补
  2. 拉取代码,拉取镜像,配置环境实现得都不太优雅

.gitea/workflows/work.yml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71

# 工作流的名字
name: myblog-dev

on:
  push:
    branches: [ main ]

jobs:
  # 任务名
  hugo-task:
    # 选择所运行的平台, 也就是哪个类型的 runner
    runs-on: ubuntu-latest

    # 运行 action 的环境
    container:
      # 不使用默认的 node:16 的基础容器镜像, 使用支持docker命令的act镜像
      image: registry.services.wait/cwx/catthehacker/ubuntu:act-22.04
      # volumes:

    steps:
      # 配置私有 CA 证书
      - name: set ca
        # 注意这个位置单独拉出来配置, 是因为多行字符串会被解析为多行命令导致, 算是个 bug
        run: echo -e "${{ secrets.CWX_CA_PEM }}" >> /usr/local/share/ca-certificates/cwx.crt

      # 配置一下后续运行的基础环境
      - name: Set run env
        run: |
          update-ca-certificates

          # git config --global http.sslVerify false
          git config --global http.sslCAInfo /usr/local/share/ca-certificates/cwx.crt
          git --version          

      # 克隆代码, 包括一份主题模板
      - name: clone code
        run: |
          git clone https://chenwx:${{secrets.CHENWX_TOKEN}}@git.services.wait/chenwx/myblog.git .
          git clone https://chenwx:${{secrets.CHENWX_TOKEN}}@git.services.wait/chenwx/hugo-theme-stack.git themes/hugo-theme-stack          

      # 登陆仓库和拉取后面需要的 docker 镜像, 其实应该合并的 set env 里面去; 调试暂留
      # 目前存在个问题, 这个 镜像应该是不需要单独拉取一次的, 但报了认证错误
      # 应该是这里配置 login 时所发生的层和 实际 pull 时的层不一样导致, 后面找时间调试一下再修改。
      - name: login registry
        run: |
          echo "${{ secrets.HARBOR_PW }}" | docker login -u "${{ secrets.HARBOR_USER }}" --password-stdin registry.services.wait
          docker pull registry.services.wait/cwx/actions-hugo:ubuntu-v0.118
          docker pull registry.services.wait/cwx/ssh-scp-action:v1          

      # 这个镜像只是单纯的将 hugo 命令打包了,并配置 ENTRYPOINT ["hugo"]
      - name: 编译-build
        uses: docker://registry.services.wait/cwx/actions-hugo:ubuntu-v0.118

      # 占个位置,看看有没有生成文件
      - name: 测试-test
        run: |
          ls public/          

      # 也就是 scp 推送到目标路径
      - name: 发布-deploy
        uses: docker://registry.services.wait/cwx/ssh-scp-action:v1
        with:
          key: ${{ secrets.ED25519_KEY }}
          host: 10.2.1.5
          port: 22
          user: wait
          ssh_before: |
            rm -rf /data/nfs_private/blog-web-data/blog/*            
          scp: |
            public/* wait@10.2.1.5:/data/nfs_private/blog-web-data/blog/            

构建效果图

Licensed under CC BY-NC-SA 4.0
转载或引用本文时请遵守许可协议,知会作者并注明出处
不得用于商业用途!
最后更新于 2023-08-10 00:00 UTC