GitHub Actions同步当前项目到一个新仓库

首先说下场景,最近又捣鼓升级了一下Git个人网站的vuepress版本,弄完之后就想在提交代码的时候把构建的资源再提交到一个新的Git仓库;

以前都是手动执行打包部署的node脚本,发布构建的资源到指定分支,最后用action自动更新,这次就想再简化一下流程,提交代码的时候直接就执行这些操作。

The initial version

因为平时项目里面也用到了husky,就先想着我再加一个hooks的监听执行命令就ok了,

.husky文件夹里创建一个pre-push文件,

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
npm run publish # 执行package.json里面的打包命令;
# "publish": "node publish",用node执行publish.js,在publish.js中执行shell文件

最终就是运行这个shell文件的内容


#!/usr/bin/env sh

# 确保脚本抛出遇到的错误
set -e

# 生成静态文件
npm run build

# 进入生成的文件夹
cd .vuepress/dist

git init
git add -A
git commit -m 'deploy'

# 如果发布到 https://<USERNAME>.github.io/<REPO>
git push -f 需要提交的git仓库ssh路径 master:gh-pages

cd - 

做完上面这些,想要的效果也能达到了,但是因为整个构建的过程是在本地执行,就非常的耗时,

可以想象一下,每次push代码,就要弹出来一个运行任务的黑色窗口,执行完了之后才能完成整个push操作,

Final version

之前是GitHub和Gitee都整了个GitPage,最近Gitee那边的挂了一直没好,直接就all in Github了,

1. 生成SSH密钥

因为使用提交代码的SSH密钥会提示重复,所以这还得再重新生成,执行下面的命令,

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

执行之后会提示你输入文件保存路径和文件名。我设置的名字是id_rsa_github_action,所以密钥对会保存在 ~/.ssh/id_rsa_github_action(私钥)和 ~/.ssh/id_rsa_github_action.pub(公钥),

2. 目标仓库添加公钥

打开id_rsa_github_action.pub文件,复制公钥内容,

进入目标Git仓库的GitHub页面,转到"Settings" -> “Deploy keys”。

点击"Add deploy key"按钮,粘贴公钥,并勾选"Allow write access"。

3. 源仓库添加私钥

打开id_rsa_github_action文件,复制私钥,

进入源代码仓库的GitHub页面,转到"Settings" -> “Secrets and variables” -> “Actions”。

点击"New repository secret"按钮,创建一个名为SSH_PRIVATE_KEY密钥,并将私钥内容粘贴进去。

4. 配置GitHub Actions工作流

创建.github/workflows/deploy.yml文件,添加下面内容:

name: Deploy VuePress Site

on:
  push:
    branches:
      - main  # 监听触发部署的分支

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout repository
      uses: actions/checkout@v2
      
    - name: Set up Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '20'  # 指定Node版本

    - name: Install dependencies
      run: npm install

    - name: Build VuePress site
      run: npm run build  # 构建

    - name: Deploy to another Git repository
      env:
        DEPLOY_REPO: git@github.com:yourusername/yournewrepo.git  # 替换为你的目标仓库地址
        DEPLOY_BRANCH: gh-pages  # 目标仓库分支
        SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}

      run: |
        mkdir -p ~/.ssh
        echo "${SSH_PRIVATE_KEY}" > ~/.ssh/id_rsa
        chmod 600 ~/.ssh/id_rsa
        ssh-keyscan github.com >> ~/.ssh/known_hosts
        git config --global user.name "github-actions[bot]"
        git config --global user.email "github-actions[bot]@users.noreply.github.com"
        cd .vuepress/dist  # 源仓库需要提交出去的代码文件夹
        git init
        git remote add origin $DEPLOY_REPO
        git checkout -b $DEPLOY_BRANCH
        git add .
        git commit -m "Deploy VuePress site"
        git push --force origin $DEPLOY_BRANCH

现在就可以在源仓库设置的分支中提交代码了,actions在监听到提交之后就自动运行工作流,

总结

还踩了挺多坑的,开始不知道是要设置Deploy keys,设置了半天的secret,各种私钥密钥的尝试,一直都是报错没有权限,提示Error: The deploy step encountered an error: The process '/usr/bin/git' failed with exit code 128,

最终的效果就是,在提交源仓库代码的时候,会触发Git Actions执行打包操作,完成之后会提交代码到目标仓库,目标仓库触发Git Actions更新Git Page。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以的,Github Actions可以用来自动化前端项目的部署到云服务器。以下是一个简单的例子: 1. 首先,在你的Github仓库中创建一个`.github/workflows`文件夹,并在该文件夹下创建一个`deploy.yml`文件。 2. 在`deploy.yml`文件中设置触发部署的事件,例如push到master分支。然后设置一个`job`,该`job`会在触发事件后运行。 3. 在该`job`中,使用`actions/checkout` action拉取代码,并使用`actions/setup-node` action安装依赖。 4. 接下来,使用你喜欢的打包工具打包你的前端代码,例如webpack或者parcel。打包后的文件会被存储在一个`dist`文件夹中。 5. 然后,使用`appleboy/ssh-action` action将打包后的文件上传到云服务器。该action会使用SSH登录到你的服务器,并将文件复制到服务器上的指定目录。 下面是一个示例的`deploy.yml`文件: ```yml name: Deploy to Cloud Server on: push: branches: - master jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Setup Node uses: actions/setup-node@v1 with: node-version: '12.x' - name: Install dependencies run: npm install - name: Build run: npm run build - name: Deploy to Cloud Server uses: appleboy/ssh-action@master with: host: ${{ secrets.HOST }} username: ${{ secrets.USERNAME }} password: ${{ secrets.PASSWORD }} port: ${{ secrets.PORT }} script: | cd /path/to/your/project rm -rf * scp -r /path/to/your/project/dist/* ./ ``` 这个例子是使用密码登录到云服务器的。如果你使用的是SSH Key,你需要相应地修改`deploy.yml`文件。此外,你需要在Github仓库的`Settings`中添加`secrets`,以保存你的服务器信息和登录凭证。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值