【问题标题】:How can I use Git token to access private repository with Travis CI / Cloudfoundry?如何使用 Git 令牌通过 Travis CI / Cloudfoundry 访问私有存储库?
【发布时间】:2018-06-26 21:43:32
【问题描述】:

配置


CF CLI 版本cf version

cf 版本 6.37.0+a40009753.2018-05-25

Buildpack 版本

https://github.com/cloudfoundry/nodejs-buildpack

清单
applications:
- path: .
  memory: 2048M
  instances: 1
  buildpack: nodejs_buildpack
  name: kpb-singlenode-api-tmp
  command: node server.js
  disk_quota: 2048M
deploy.sh
#!/bin/bash
./Bluemix_CLI/bin/ibmcloud config --check-version false
./Bluemix_CLI/bin/ibmcloud api $API_ENDPOINT
./Bluemix_CLI/bin/ibmcloud login --apikey $API_KEY
./Bluemix_CLI/bin/ibmcloud target -o $IBMCLOUD_ORGANIZATION -s $IBMCLOUD_SPACE
./Bluemix_CLI/bin/ibmcloud app push kpb-node-api
.travis.yml
language: node_js
node_js:
  - '8'
script: echo "skipping tests"
before_deploy:
  - curl -L https://clis.ng.bluemix.net/download/bluemix-cli/latest/linux64 | tar -zx
  - chmod -R u+x ./Bluemix_CLI/bin
  - chmod +x ./deploy.sh
deploy:
  provider: script
  script: ./deploy.sh
  on:
    repo: myrepo/kpb-node-api
    branch: master
  skip_cleanup: true

问题


我只是想在 IBM Cloud (cloudfoundry) 上推送我的应用程序,但我在 github Enterprise 上使用私有存储库,因此 cf (cloudfoundry) 构建代理失败 npm install 因为它尝试登录/密码连接(被拒绝)虽然它应该使用 Git 令牌...

使用 Travis CI 自动构建。

预期行为

Cloudfoundry(或 Travis?)代理在运行 npm install 时应使用 git 令牌

实际行为

它坚持登录/密码凭据,所以 github 抛出 you should use git token or ssh key instead


据我所知,问题在于我们使用的是私有存储库,声明如下:git+https://github.com/someone/awesome-private-pkg.git(我们不能使用 npm publish 等...) 当 cloudfoundry 尝试使用登录名/密码凭据 npm install 私有存储库时将引发错误

这是我的错误日志:

npm ERR! Error while executing:
npm ERR! /usr/bin/git ls-remote -h -t https://github.ibm.com/myrepo/kpb-api-pkg
npm ERR! 
npm ERR! remote: Password authentication is not available for Git operations.
npm ERR! remote: You must use a personal access token or SSH key.
npm ERR! remote: See https://github.ibm.com/settings/tokens or https://github.ibm.com/settings/ssh
npm ERR! fatal: unable to access 'https://github.ibm.com/myrepo/kpb-api-pkg/': The requested URL returned error: 403
npm ERR! 
npm ERR! exited with error code: 128
npm ERR! A complete log of this run can be found in:
npm ERR!     /home/travis/.npm/_logs/2018-06-26T10_31_07_934Z-debug.log

我正在挖掘 .bashrc 以通过 git config --global git.token 设置变量

感谢您的帮助,祝您有美好的一天!

【问题讨论】:

  • 不要指向 buildpack 的 master 分支,例如:buildpack: https://github.com/cloudfoundry/nodejs-buildpack.git。主分支经常发生变化,虽然它不经常发生,但甚至可能进入完全损坏的状态。相反,您想使用平台提供的 buildpack 版本(您可以从 cf buildpacks 获取名称)或者您想引用 buildpack 的标记稳定版本,例如:buildpack: https://github.com/cloudfoundry/nodejs-buildpack.git#v1.6.27#<tag> 允许您指定所需的版本。

标签: git npm ibm-cloud travis-ci cloud-foundry


【解决方案1】:

所以你只需要添加以下内容:

before_install:
  - echo -e "machine github.ibm.com\n  login $GIT_TOKEN" > ~/.netrc

到您的 .travis.yml


解决方案本身就来自Travis docs

该表在访问方面非常明确,因为我正在研究使用 SSH Deploy Key 方法 (git+ssh://git@github.ibm.com/org/app) 获取我的所有私有模块,因此很难使用单个 SSH 密钥获取所有存储库。 ..

因此他们建议User Key 方法是最好的,但我无法申请,因为 GitHub Enterprise 将 1 个公司邮件地址绑定到 1 个 GHubE 帐户(SAML 的东西)

就像我在帖子中所说的那样,我无法以正确的方式提供正确的凭据,我没有根据 PasswordAPI token 方法发现 .netrc 文件存在

显然它将 travis 代理设置为使用所需的登录类型(ssh 除外)!


非常感谢@DanielMikusa 的帮助!

【讨论】:

  • 您好!我正在尝试做类似的事情。我想访问我拥有的私人仓库。我已经在此处设置了 SSH 密钥和详细信息:stackoverflow.com/questions/27444891/…
  • 我在 before_install 部分复制并粘贴了命令(来自上面的链接),它仍然停留在我的 repo 的用户名部分(它仍然试图让我登录)。我是否需要更改用于访问 repo 的 URL?如果有,是什么格式?我尝试了 git@github.com/theRestOfTheLink 并没有用。
  • 上述解决方案适用于您可以提供给 Travis 的 Git 令牌,正如我提到的,如果您可以为您的 Travis CI 创建一个 Github 帐户并将其添加到您的合作者和它可能对你有帮助的东西!
【解决方案2】:

这里有很多信息,但我不确定它们是否都相关。看来您的问题的症结在于,当您的应用程序被暂存时(即 buildpack 运行时),buildpack 运行 npm install 进而尝试从私有 github 存储库中获取依赖项。

假设我猜对了……

  1. 一种可能的解决方案是供应您的依赖项。当您“供应商”依赖项时,您基本上是在本地或在您控制的某些环境中运行npm install,然后您将依赖项与您的应用程序一起发送到 Cloud Foundry。它使应用程序更大,但是当您的应用程序阶段和平台运行 npm install 时,所有依赖项都已经存在,因此 npm install 基本上变成了无操作。

    主要技巧是编译依赖项。要完成这项工作,您需要在与 Cloud Foundry 上的 rootfs 匹配的系统上提供您的依赖项。目前cflinuxfs2 堆栈与 Ubuntu Trusty 14.04 匹配。

    您可以在此处的文档中阅读有关供应商依赖项的更多信息。

    https://docs.cloudfoundry.org/buildpacks/node/index.html#vendoring

  2. 另一种解决方案是使用cf local。这是一个cf cli 插件,它使用 Docker 在本地系统上运行 buildpacks。在本地系统上,您可能能够访问您的私有存储库(它基本上是在您的笔记本电脑/PC 上运行的)。然后 buildpack 将运行并创建一个完全独立的 droplet。然后,您可以使用cf local 导出该液滴并将其发送到任何其他 Cloud Foundry 平台。

    美妙之处在于,Droplet 是平台运行您的应用程序所需的一切,因此它甚至不需要暂存您的应用程序,这绕过了从公共云上的暂存环境访问您的私有代码的问题铸造厂。

  3. 您可能能够做的另一件事是包含一个.npmrc 文件,但我不能100% 肯定这会奏效。 buildpack 应该配置npm 以在运行npm install 时查看此文件。这里的想法是在npm 中包含一些配置选项,这将允许它连接到您的存储库。我不是npm 的专家,所以我不知道是否存在这样的选项。只是想我会提到这一点以防万一。

【讨论】:

  • 非常感谢,我会尝试每一个,让你知道:-)
  • 我已经尝试过第 1 次和第 2 次,但都遇到了同样的问题:我的私人包裹很重(700Mo +)对于 cf local 或 vendoring 来说太大了,但谢谢你,因为 vendoring 概念似乎非常常用和 cf local 真是太棒了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 2017-12-23
  • 2022-08-08
相关资源
最近更新 更多