从手动到自动:代码多平台同步的最终秘籍
创作时间:
作者:
@小白创作中心
从手动到自动:代码多平台同步的最终秘籍
引用
CSDN
1.
https://blog.csdn.net/u010868168/article/details/145645396
在软件开发过程中,代码的多平台同步是一个常见的需求。本文将介绍一种通过GitHub Actions实现代码自动同步到多个代码托管平台(如Gitee、Gitlab、Bitbucket等)的方法,特别是基于SSH私钥的自动化同步方案,让代码同步变得更加简单高效。
一、背景与需求
在日常开发中,开发者通常会将代码存储在GitHub上。然而,由于网络访问的限制,有时会遇到无法访问的情况。为了确保其他用户能够顺利访问代码,开发者期望在向GitHub提交代码时,能够同步将代码推送到多个代码托管平台,如Gitee、Gitlab、Bitbucket等。
二、初始方案:本地配置多仓库地址
起初,开发者通过在本地配置多个仓库地址来实现这一需求,具体命令如下:
git remote add github 仓库地址
git remote add gitee 仓库地址
但是,每次提交代码时,都需要手动依次将代码推送到各个对应的仓库,操作较为繁琐:
git push github main
git push gitee main
三、使用 GitHub Action 实现自动化同步
后来,GitHub Action 的出现提供了自动化操作的解决方案。开发者开始使用它来实现多平台同步。不过,在使用多个平台同步功能时,需要事先向每个同步平台申请访问 Token。这些 Token 通常只能显示一次,当开启新的项目时,常常忘记之前的 Token,导致难以再次配置。
之前使用的同步代码如下:
# Sample workflow for building and deploying a Jekyll site to GitHub Pages
name: Push Other Pages
on:
# Runs on pushes targeting the default branch
push:
branches: ["main"]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
# Build job
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
with:
ref: gh-pages
fetch-depth: 0 # <-- clone with complete history
- name: Sync Repo to Bitbucket
uses: heussd/mirror-to-bitbucket-github-action@v2
with:
username: flowstone
spacename: flowstone
repository: flowstone.bitbucket.io
password: ${{ secrets.BITBUCKET_PASSWORD }}
- name: Sync Repo to Coding
uses: serverlesslife-cn/sync-repo-to-coding@master
env:
# 在 GitHub Settings->Secrets 配置 CODING_PRIVATE_KEY
SSH_PRIVATE_KEY: ${{ secrets.CODING_PRIVATE_KEY }}
with:
# 注意替换为你的 GitHub 源仓库地址
github-repo: "git@github.com:flowstone/flowstone.github.io.git"
# 注意替换为你的 CODING 目标仓库地址
coding-repo: "git@e.coding.net:flowstone/flowstone.coding.me.git"
- name: Sync Repo to Gitlab
uses: action-pack/gitlab-sync@v3
with:
username: ${{ secrets.USERNAME }}
url: ${{ secrets.GITLAB_URL }}
# Personal access token from gitlab.com
token: ${{ secrets.GITLAB_PAT }}
四、新方法:SSH 私钥同步方案
后来,开发者从豆包处了解到一种新的同步方法。只需将 SSH 的私钥保存到 GitHub 仓库的 Secret 中,当执行 GitHub Action 脚本时,服务器就拥有私钥,从而可以同步绑定了相同公钥的代码平台。虽然这种方式存在一定风险,因为只要拥有私钥就可以访问所有仓库,但对于个人开发者而言,影响不大。
4.1 操作流程
- 找到本地的 SSH 私钥,一般默认绑定的是id_rsa。
- 打开id_rsa文件。
- 将文件内容配置到 GitHub 仓库中,每个需要同步的仓库都需要进行此配置。
4.2 同步脚本
同步脚本如下:
name: Sync Multi - Branches to Multiple Platforms via SSH
on:
push:
branches:
- '*' # 监听所有分支的推送事件
workflow_dispatch:
jobs:
sync:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0 # 进行完整克隆
- name: Configure Git user
run: |
git config --global user.name '流体石头'
git config --global user.email 'example@example.com'
- name: Add SSH key
uses: webfactory/ssh-agent@v0.8.0
with:
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
- name: Add remote repositories
run: |
git remote add gitee git@gitee.com:flowstone/FS-Tool-Pro.git
git remote add bitbucket git@bitbucket.org:flowstone/FS-Tool-Pro.git
git remote add gitlab git@gitlab.com:flowstone/FS-Tool-Pro.git
- name: Add host keys to known_hosts
run: |
ssh-keyscan -H gitee.com >> ~/.ssh/known_hosts
ssh-keyscan -H bitbucket.org >> ~/.ssh/known_hosts
ssh-keyscan -H gitlab.com >> ~/.ssh/known_hosts
- name: Get current branch
id: get_branch
run: echo "::set-output name=branch::${GITHUB_REF#refs/heads/}"
- name: Push to targets
run: |
git push --force gitee ${{ steps.get_branch.outputs.branch }}
git push --force bitbucket ${{ steps.get_branch.outputs.branch }}
git push --force gitlab ${{ steps.get_branch.outputs.branch }}
五、注意事项
在上述同步代码中,需要指定同步的仓库地址。每次推送代码时,工作流都会自动执行。需要注意的是,其他代码平台必须配置相同的id_rsa公钥,并且创建相同的仓库名。
热门推荐
劳动法中的N、N+1、2N、2N+1具体含义及使用情况解释
起诉前的尸检流程:如何确保证据的合法性和完整性?
词性辨别:轻松掌握语法秘诀
7个实用方法,轻松去除头皮屑
银行加息对贷款影响有多大
Pandas处理Excel文件:读取、写入与追加数据的完整指南
赤藓红食用色素致癌,美国食药管理局拟禁用
右胸后背隐痛要当心了
如何辨别燕窝引起的过敏反应症状
燕窝的酸碱性揭秘:营养成分与代谢作用分析
关羽的封号到底是什么?到底是汉寿县的亭侯,还是汉朝的寿亭侯
中药调理便秘效果好吗
个人征信报告查询入口官网如何快速获取信用记录
高档手表品牌如何辨别真假
金鱼褪色怎么办?快速恢复色彩秘诀!
如何高效评估货代平台的服务与信誉
照片管理图片筛选怎么弄
深度解读电影《解密》:家国下的抉择,梦境与人性的密码解析
脑梗后遗症怎么治疗
山东大学陈哲宇团队发现不可预测威胁导致焦虑的神经环路机制
黄骅冬枣和沾化冬枣区别
凯特·布兰切特领衔《免责声明》:心理惊悚与人性探讨的力作
2.5D与3D封装技术:未来电子系统的新篇章
什么是3D封装?3D封装是如何工作的?
《第四扇门:凶宅之谜》
生子当如孙仲谋!为何没能统一天下?看看其原因
乱世三国志御灵系统详解:从入门到精通
躁郁症的心理治疗方法
预编码算法详解:原理、实现与优化
浅析难民工作权的国际法保护:以联合国难民署为例