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
感谢您的帮助,祝您愉快!
答案 0 :(得分:2)
所以您只需要添加
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内容)
就像我在帖子中说的那样,我无法以正确的方式提供正确的凭据,根据.netrc
和{{1},我不知道存在Password
文件}方法
显然,它会将travis代理设置为使用所需的登录类型(ssh除外)!
非常感谢@DanielMikusa的帮助!
答案 1 :(得分:1)
这里有很多信息,我不确定是否都有用。看来,问题的症结在于,在暂存应用程序时(即,运行buildpack时),buildpack运行npm install
,这反过来又试图从私有github存储库中获取依赖项。
假设我没错...
一种可能的解决方案是供应您的依赖项。当您“依赖”供应商时,基本上是在本地或您控制的某些环境中运行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
另一种解决方案是使用cf local
。这是一个cf
cli插件,它使用Docker在本地系统上运行buildpacks。在本地系统上,您大概可以访问您的私有存储库(该存储库基本上是从便携式计算机/ PC运行的)。然后,构建包将运行并创建一个完全独立的液滴。然后,您可以使用cf local
导出该Droplet并将其发送到任何其他Cloud Foundry平台。
美妙之处在于,液滴是平台运行您的应用程序所需的所有内容,因此它甚至不需要登台应用程序,从而避免了谁从公共云上的登台环境访问私有代码的问题。铸造厂。
您可能可以做的另一件事是,包括一个.npmrc
文件,而且我不是100%确信这会起作用。构建包应该配置npm
使其在运行npm install
时查看该文件。这里的想法是在npm
中包含一些配置选项,使它可以连接到您的仓库。我不是npm
的专家,所以我不知道是否存在这样的选项。只是以为我会提到它以防万一。