You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何配置CI/CD流水线,通过SSH Key或Access Token实现无用户名密码的代码拉取?

如何配置CI/CD流水线,通过SSH Key或Access Token实现无用户名密码的代码拉取?

嘿,我来帮你一步步搞定这个问题!不管你选SSH Key还是GitHub Access Token,都能实现无密码自动化拉取代码,下面分两种方案详细说明:

方案一:使用SSH Key认证

这是比较常用的长期认证方式,适合不需要频繁更换凭证的场景:

  • 生成SSH密钥对:在本地机器或者CI运行环境里执行以下命令,一路回车不要设置密码(否则CI脚本无法自动完成认证):
    ssh-keygen -t ed25519 -C "your-email@example.com"
    
    执行完后会在~/.ssh目录下生成id_ed25519(私钥)和id_ed25519.pub(公钥)两个文件。
  • 把公钥添加到GitHub仓库:复制id_ed25519.pub里的全部内容,打开你的GitHub仓库 → 点击顶部的「Settings」→ 左侧菜单选「Deploy keys」→ 点击「Add deploy key」,粘贴公钥内容,勾选「Allow write access」(如果你的流水线只需要拉取,不推送的话可以不勾选),最后点击「Add key」保存。
  • 在CI脚本里配置私钥
    1. 把生成的id_ed25519私钥内容添加到CI平台的加密秘密变量里(比如GitHub Actions的「Secrets and variables」→「Actions」里新建Secret,命名为SSH_PRIVATE_KEY;GitLab CI则在「Settings」→「CI/CD」→「Variables」里添加)。
    2. 在你的CI脚本里加入以下步骤,完成SSH配置并拉取代码:
      # 创建SSH目录并设置权限
      mkdir -p ~/.ssh
      echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_ed25519
      chmod 600 ~/.ssh/id_ed25519
      # 添加GitHub主机指纹到已知主机列表,避免首次连接的确认弹窗
      ssh-keyscan github.com >> ~/.ssh/known_hosts
      chmod 644 ~/.ssh/known_hosts
      # 拉取目标分支代码(如果是首次克隆)
      git clone git@github.com:your-username/your-repo.git -b your-target-branch
      # 如果是已经克隆过的仓库,直接拉取最新代码
      # git pull origin your-target-branch
      

方案二:使用GitHub Access Token认证

这种方式更灵活,可以设置权限范围和过期时间,安全性更高,适合短期场景或者需要精细权限控制的情况:

  • 生成Access Token:打开GitHub个人设置 → 左侧菜单选「Developer settings」→ 「Personal access tokens」→ 「Tokens (classic)」→ 点击「Generate new token」,填写备注,勾选repo权限(如果只需要拉取公开仓库,勾选public_repo即可;私有仓库则需要全选repo权限),设置合适的过期时间,最后点击「Generate token」,一定要把生成的token复制保存好——它只会显示一次!
  • 在CI脚本里配置Token
    1. 把刚才生成的token添加到CI平台的加密秘密变量里,命名为GITHUB_TOKEN
    2. 在CI脚本里用HTTPS链接结合token拉取代码:
      # 首次克隆目标分支
      git clone https://${GITHUB_TOKEN}@github.com:your-username/your-repo.git -b your-target-branch
      # 如果是已克隆的仓库,先更新远程仓库URL再拉取
      # git remote set-url origin https://${GITHUB_TOKEN}@github.com:your-username/your-repo.git
      # git pull origin your-target-branch
      

额外小提示

如果你用的是GitHub Actions,其实官方提供了actions/checkout动作,已经内置了认证逻辑,直接用它更省心:

- name: Checkout target branch code
  uses: actions/checkout@v4
  with:
    ref: your-target-branch  # 指定要拉取的分支
    token: ${{ secrets.GITHUB_TOKEN }}  # 引用你设置的秘密变量

注意:不管用哪种方式,CI里的秘密变量一定要加密存储,绝对不能明文写在脚本里,避免凭证泄露!

备注:内容来源于stack exchange,提问作者ATUL VERMA

火山引擎 最新活动