GitHub Actions 是 GitHub 的推出的持續集成服務。教程可以參看 GitHub Actions 入門教程 或 官方文檔。
我們或許會希望在倉庫 A 上觸發 workflow 將倉庫 A 上的全部或部分代碼,提交(部署)到另一個倉庫 B 上,此時需要分情況考慮
倉庫 A#
不論倉庫 A 公有或私有,對整個 workflow 沒有影響。在創建 workflow 時,github 會自動創建秘鑰,以支持倉庫訪問。秘鑰通過 ${{ secrets.GITHUB_TOKEN }}
從上下文中獲取(示例)。秘鑰權限可以根據需求調整。
倉庫 B#
public#
個人博客項目可能會需要將博客頁面部署到 github page 上。此時我們可以在私有的倉庫 A 上維護博客源代碼,然後在 A 倉庫上定義工作流,對源代碼進行編譯和部署。這時候倉庫 B 是一個公有倉庫
# to do
該種類型也適用下面的 private 小節中介紹方法
private#
有時也可能會向私有的倉庫 B 提交代碼
這就需要引入 deploy key 再通過 ssh 協議提交
此時需要首先生成 ssh key,例如
ssh-keygen -t ed25519
在倉庫 A > Settings > Secrets > New Repository Secret
配置公鑰
在倉庫 B > Settings > Deploy Keys > Add Deploy Key
配置私鑰
然後在倉庫 A 中構造 github action 的 workflow 如下
name: test
on:
push:
branches:
- 'main'
jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Git init
run: |
git config user.name "${{ github.actor }}"
git config user.email "${{ github.actor_id }}@users.noreply.github.com"
### or you can use github action bot as commit user
# git config --local user.email "action@github.com"
# git config --local user.name "GitHub Action
- name: Add SSH Key
uses: webfactory/ssh-agent@v0.5.4
with:
ssh-private-key: ${{ secrets.DEPLOY_SSH_KEY }}
- name: Push to repo
run: |
git remote add target "git@github.com:${{ your repo path }}.git"
git checkout --orphan temp
git add --all
git commit --allow-empty -m "your commit message"
git push target temp:main --force
提交 github 測試即可
參考: https://stackoverflow.com/questions/68590575/github-actions-remote-repo-issues