You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Git中配置CI/CD实现代码提交后同步至本地或生产服务器

问题1:配置CI/CD同步Git代码变更到本地电脑

首先得明确:常规CI/CD流水线都是跑在远程服务器上的,要同步到你的本地电脑,其实最直接的方式是手动git pull或者用系统定时任务(比如Windows任务计划、Linux cron)自动拉取。但如果你确实想用CI/CD来实现远程仓库有变更时主动触发本地更新,可以这么做:

  • 第一步:在本地部署自托管Runner
    不管你用GitLab还是GitHub,都需要在你的本地电脑上注册一个自托管Runner,这样CI/CD任务能直接在你的机器上执行。注册步骤不难,跟着官方指引在本地安装Runner并关联你的仓库就行,记得给Runner打个专属标签(比如local-machine),方便后续在配置文件里指定。

  • 第二步:编写CI/CD配置文件
    以GitLab为例,在仓库根目录创建.gitlab-ci.yml,内容如下:

    sync_local_repo:
      stage: deploy
      tags:
        - local-machine # 指定用你本地的Runner执行
      only:
        - main # 监听main分支的变更(换成你实际的分支名)
      script:
        - cd /Users/yourname/projects/your-repo # 替换成你本地仓库的绝对路径
        - git pull origin main # 拉取最新代码
    

    如果是GitHub Actions,创建.github/workflows/sync-local.yml:

    name: Sync to Local Machine
    on:
      push:
        branches: [ main ]
    
    jobs:
      sync:
        runs-on: self-hosted # 用你本地注册的自托管Runner
        steps:
          - name: Pull latest code
            run: |
              cd /Users/yourname/projects/your-repo
              git pull origin main
    
  • 关键注意点

    1. 确保本地Runner有权限访问你的仓库目录,并且Git已经配置了免密拉取(比如添加SSH密钥到远程仓库,或者用凭证缓存),不然每次拉取都会卡在输入密码环节。
    2. 你的本地电脑必须保持在线,且Runner处于运行状态,否则CI/CD任务会失败。如果只是个人使用,定时任务可能比CI/CD更省心。

问题2:提交master分支后同步代码到生产服务器(已配置Git Runner)

既然已经有Git Runner了,核心就是通过CI/CD流水线触发生产服务器的代码更新,常用的两种方案,根据你的场景选:

方案1:让生产服务器直接拉取代码(最简洁)

如果生产服务器能访问你的Git仓库,这种方式最简单,不需要在Runner和服务器之间传输文件,直接让服务器拉取最新代码:

配置文件示例(GitLab)

deploy_to_production:
  stage: deploy
  only:
    - master # 只在master分支提交时触发
  variables:
    # 建议在项目CI/CD设置里添加这些变量,不要硬编码
    PRODUCTION_USER: "your-server-user"
    PRODUCTION_SERVER: "xxx.xxx.xxx.xxx"
    PRODUCTION_REPO_PATH: "/var/www/your-app"
  script:
    # 通过SSH远程执行拉取命令
    - ssh $PRODUCTION_USER@$PRODUCTION_SERVER "cd $PRODUCTION_REPO_PATH && git pull origin master"

准备工作

  1. 把Git Runner的公钥添加到生产服务器的~/.ssh/authorized_keys文件里,确保Runner能免密登录服务器。
  2. 生产服务器上已经初始化了Git仓库,并且关联了你的远程仓库,同时配置了免密拉取(比如把服务器的SSH密钥添加到Git仓库的部署密钥里)。

方案2:用rsync传输构建后的文件(适合需要构建的项目)

如果你的代码需要先在Runner上构建(比如前端打包、后端编译),然后把构建产物传到生产服务器,用rsync是最优解:

配置文件示例(GitLab)

deploy_to_production:
  stage: deploy
  only:
    - master
  before_script:
    # 如果Runner是Debian/Ubuntu系统,安装rsync和ssh客户端
    - apt-get update && apt-get install -y rsync openssh-client
  variables:
    PRODUCTION_USER: "your-server-user"
    PRODUCTION_SERVER: "xxx.xxx.xxx.xxx"
    BUILD_OUTPUT_PATH: "./dist" # 构建产物的目录,根据你的项目调整
    PRODUCTION_TARGET_PATH: "/var/www/your-app"
  script:
    # 先执行构建步骤,比如前端项目:npm install && npm run build
    - npm install && npm run build
    # 用rsync同步文件,--delete会删除服务器上不存在的文件(按需选择)
    - rsync -avz --delete $BUILD_OUTPUT_PATH/ $PRODUCTION_USER@$PRODUCTION_SERVER:$PRODUCTION_TARGET_PATH/

关键注意事项

  • 同样要配置Runner到生产服务器的SSH免密登录。
  • 敏感信息(比如服务器地址、用户名)一定要用CI/CD变量存储,不要直接写在yml文件里,避免泄露。
  • 正式部署前,一定要在测试环境验证流水线,确保构建和传输都正常,最好加个验证步骤(比如检查服务器上的服务是否正常运行)。

内容的提问来源于stack exchange,提问作者mahta 1988

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 16:53:14