如何在Github Workflows流水线中下载私有Ruby gem Sidekiq Pro
Sidekiq Pro在GitHub Workflows中授权失败的排查与解决
问题背景
Sidekiq Pro是需授权的私有Ruby Gem,本地运行正常,但在GitHub Workflows流水线中执行bundle install时始终报未授权错误。已尝试多种bundle配置方式,且通过cat ./bundle/config能看到密钥已写入,但问题仍未解决。
现有尝试的配置问题
首先注意到你尝试的配置中存在路径拼写错误:mkdir -p ~./bundle应为mkdir -p ~/.bundle,错误的路径会导致bundle无法读取到配置文件,这很可能是核心原因之一。
可行的解决方案
方案1:修正路径并正确写入bundle配置
使用正确的用户目录路径写入bundle配置,同时用单引号避免shell解析变量:
- name: Configure Sidekiq run: | mkdir -p ~/.bundle echo 'BUNDLE_GEMS__CONTRIBSYS__COM: "${{ secrets.SIDEKIQ_KEY }}:${{ secrets.SIDEKIQ_PASS }}"' >> ~/.bundle/config
或者直接配置项目本地的bundle:
- name: Configure Sidekiq run: | bundle config set --local https://gems.contribsys.com "${{ secrets.SIDEKIQ_KEY }}:${{ secrets.SIDEKIQ_PASS }}"
方案2:针对Docker Build的配置(如果流水线涉及Docker构建)
如果你的docker build过程中需要安装Sidekiq Pro,主机的bundle配置不会自动继承到容器内,需通过构建参数传递密钥:
- 修改Dockerfile,添加构建参数并配置bundle:
ARG SIDEKIQ_KEY ARG SIDEKIQ_PASS # 配置Sidekiq Pro私有源 RUN bundle config set --local https://gems.contribsys.com "$SIDEKIQ_KEY:$SIDEKIQ_PASS" # 执行bundle install RUN bundle install --without development test
- 在GitHub Workflows中传递构建参数:
- name: Build Docker Image run: | docker build \ --build-arg SIDEKIQ_KEY=${{ secrets.SIDEKIQ_KEY }} \ --build-arg SIDEKIQ_PASS=${{ secrets.SIDEKIQ_PASS }} \ -t your-image-name .
方案3:验证Secrets是否正确注入
有时Secrets可能未被正确传递,可添加步骤验证:
- name: Verify Secrets run: | echo "Sidekiq Key Length: ${#SIDEKIQ_KEY}" echo "Sidekiq Pass Length: ${#SIDEKIQ_PASS}" env: SIDEKIQ_KEY: ${{ secrets.SIDEKIQ_KEY }} SIDEKIQ_PASS: ${{ secrets.SIDEKIQ_PASS }}
如果输出的长度为0,说明Secrets未正确配置,需检查GitHub仓库的Secrets设置。
额外注意事项
- 若密钥包含特殊字符(如
@、:、/),需用双引号包裹整个密钥字符串,避免shell解析出错 - 确保
bundle install命令在配置完私有源之后执行,顺序不能颠倒
内容的提问来源于stack exchange,提问作者tofersApology
相关产品推荐
相关产品推荐

