将站点部署到 Netcup 虚拟主机的 Gitea action 工作流

以下 Gitea action 工作流将 Hugo 站点部署到 Netcup 虚拟主机账户。它使用带有预装私钥的 SSH 访问(在 Netcup 服务器上运行 ssh-keygen -t ed25519 -f id_netcup echo $(cat id_netcup.pub) >> ~/.ssh/authorized_keys)。

它期望在 Gitea 中通过 Web 界面配置以下密钥(仓库设置 -> Runners -> Secrets):

这是为了实现从 CI/CD 作业的无密码登录。

Gitea Netcup secrets

此外,它期望你配置 Netcup 账户以从 my-domain.com/httpdocs 提供服务。

它与 Hugo 构建 action 配合使用,你可以在我们之前的文章 Gitea Hugo 构建 action 中找到它,但修改它只需要你更改 Download artifact 步骤。

deploy_netcup.yml
name: Deploy
run-name: Deploying homepage
on: [push]

jobs:
  Deploy-Netcup:
    runs-on: ubuntu-latest
    steps:
      - name: Download artifact
        uses: actions/download-artifact@v3
        with:
          name: hugo-site
          path: public
      # Put into a tarball
      - name: Make tarball
        run: mkdir -p my-domain.com && mv public my-domain.com/httpdocs && tar -czf my-domain.com.tar.gz my-domain.com
        shell: sh
      # Accept host key
      - name: Accept SSH host key
        run: echo "my-domain.com ssh-ed25519 ${{ secrets.NETCUP_SSH_HOST_KEY }}" >> ~/.ssh/known_hosts && cat ~/.ssh/known_hosts
        shell: sh
      # Deploy to Netcup
      - name: Export SSH key
        run: echo "${{ secrets.NETCUP_SSH_KEY }}" > id_netcup && chmod 600 id_netcup
        shell: sh
      - name: Remove old files
        run: ssh -i id_netcup ${{ secrets.NETCUP_USERNAME }}@my-domain.com "rm -rfv my-domain.com/*"
        shell: sh
      - name: Deploy to Netcup
        run: "scp -i id_netcup my-domain.com.tar.gz ${{ secrets.NETCUP_USERNAME }}@my-domain.com:"
        shell: sh
      - name: Extract tarball on server
        run: ssh -i id_netcup "${{ secrets.NETCUP_USERNAME }}@my-domain.com" "tar xzvf my-domain.com.tar.gz"
        shell: sh

所有先前存在的文件将从服务器上的 my-domain.com 目录中删除,然后才上传新文件。最好确保该文件夹中没有重要文件。

我不建议删除此步骤,否则在仓库中重命名或删除的文件将不会从服务器中删除,并且将永远可访问。

为了使上传更快(rsync 在 Netcup 虚拟主机上通过 SSH 不可用,而且当上传许多小文件时也有点慢),我们首先创建一个 tarball,然后只使用 scp 上传 tarball,然后在服务器上运行 tar xzvf


Check out similar posts by category: Gitea, CI/CD