如何使用Trait CI / Cloudfoundry使用Git令牌访问私有存储库?

时间:2018-06-26 21:43:33

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

配置


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安装私有存储库时,将抛出该错误

这是我的错误日志:

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设置vars

感谢您的帮助,祝您愉快!

2 个答案:

答案 0 :(得分:2)

所以您只需要添加

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

到您的 .travis.yml


一种自Travis docs

enter image description here

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

因此,他们建议使用User Key方法,这是最好的方法,但由于 GitHub Enterprise 将1个公司的邮件地址绑定到1个GHubE,我无法采用帐户(SAML内容)

就像我在帖子中说的那样,我无法以正确的方式提供正确的凭据,根据.netrc和{{1},我不知道存在Password文件}方法

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


非常感谢@DanielMikusa的帮助!

答案 1 :(得分:1)

这里有很多信息,我不确定是否都有用。看来,问题的症结在于,在暂存应用程序时(即,运行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运行的)。然后,构建包将运行并创建一个完全独立的液滴。然后,您可以使用cf local导出该Droplet并将其发送到任何其他Cloud Foundry平台。

    美妙之处在于,液滴是平台运行您的应用程序所需的所有内容,因此它甚至不需要登台应用程序,从而避免了谁从公共云上的登台环境访问私有代码的问题。铸造厂。

  3. 您可能可以做的另一件事是,包括一个.npmrc文件,而且我不是100%确信这会起作用。构建包应该配置npm使其在运行npm install时查看该文件。这里的想法是在npm中包含一些配置选项,使它可以连接到您的仓库。我不是npm的专家,所以我不知道是否存在这样的选项。只是以为我会提到它以防万一。