我如何使用 Git 令牌通过 Travis CI / Cloudfoundry 访问私有存储库?
How can I use Git token to access private repository with 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
login/password 连接(被拒绝)而它应该使用 Git 令牌...
构建是使用 Travis 自动完成的 CI。
预期行为
Cloudfoundry(或 Travis?)代理应使用 git 令牌,而 运行 npm install
实际行为
它坚持 login/password 凭据,因此 github 抛出 you should use git token or ssh key instead
据我所知,问题是我们正在使用私有存储库,声明如下:git+https://github.com/someone/awesome-private-pkg.git
(我们不能使用 npm publish 等...)
当 cloudfoundry 尝试使用 login/password 凭据
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
设置变量
感谢您的帮助,祝您愉快!
这里有很多信息,但我不确定它们是否都相关。看来问题的症结在于,当您的应用程序被暂存时(即当 buildpack 运行s 时),buildpack 运行s npm install
又试图从中获取依赖项私人 github 回购。
假设我猜对了...
一种可能的解决方案是出售您的依赖项。当您 "vendor" 依赖项时,您基本上是 运行ning npm install
本地或在您控制的某些环境中,然后您将依赖项与您的应用程序一起发送到 Cloud Foundry。它适用于更大的应用程序,但是当您的应用程序阶段和平台 运行s 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 到 运行 构建包。在本地系统上,您可能能够访问您的私有存储库(它基本上是从您的 laptop/PC 访问 运行ning)。然后 buildpack 将 运行 并创建一个完全独立的 droplet。然后,您可以使用 cf local
导出该 Droplet 并将其发送到任何其他 Cloud Foundry 平台。
美妙之处在于 Droplet 是平台 运行 您的应用程序所需的一切,因此它甚至不需要暂存您的应用程序,从而绕过了从 who 访问您的私有代码的问题public Cloud Foundry 上的暂存环境。
您可以做的另一件事是包含一个 .npmrc
文件,我不能 100% 确定这会起作用。 buildpack 应该配置 npm
在它 运行 时查看这个文件 npm install
。这里的想法是在 npm
中包含一些配置选项,以允许它连接到您的存储库。不过,我不是 npm
方面的专家,所以我不知道是否存在这样的选项。只是想我会提到这个以防它可能有所帮助。
因此您只需添加以下内容:
before_install:
- echo -e "machine github.ibm.com\n login $GIT_TOKEN" > ~/.netrc
给你的.travis.yml
解决方案本身就是来自 Travis docs
这个 table 在访问方面非常明确,因为我正在深入研究使用 SSH Deploy Key
方法 (git+ssh://git@github.ibm.com/org/app
) 获取我所有的私有模块,这很难做到使用单个 SSH 密钥获取所有存储库...
因此他们建议使用 User Key
方法,这是最好的方法,但我 不能应用 因为 GitHub Enterprise 将 1 个公司邮件地址绑定到 1 个 GHubE 帐户(SAML 东西)
就像我在 post 中所说的那样,我无法以正确的方式提供正确的信誉我没有根据 [=15= 确定存在 .netrc
文件] 和 API token
方法
显然它将 travis 代理设置为使用所需的登录类型(ssh 除外)!
非常感谢@DanielMikusa 的帮助!
配置
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
login/password 连接(被拒绝)而它应该使用 Git 令牌...
构建是使用 Travis 自动完成的 CI。
预期行为
Cloudfoundry(或 Travis?)代理应使用 git 令牌,而 运行 npm install
实际行为
它坚持 login/password 凭据,因此 github 抛出 you should use git token or ssh key instead
据我所知,问题是我们正在使用私有存储库,声明如下:git+https://github.com/someone/awesome-private-pkg.git
(我们不能使用 npm publish 等...)
当 cloudfoundry 尝试使用 login/password 凭据
这是我的错误日志:
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 运行s 时),buildpack 运行s npm install
又试图从中获取依赖项私人 github 回购。
假设我猜对了...
一种可能的解决方案是出售您的依赖项。当您 "vendor" 依赖项时,您基本上是 运行ning
npm install
本地或在您控制的某些环境中,然后您将依赖项与您的应用程序一起发送到 Cloud Foundry。它适用于更大的应用程序,但是当您的应用程序阶段和平台 运行snpm 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 到 运行 构建包。在本地系统上,您可能能够访问您的私有存储库(它基本上是从您的 laptop/PC 访问 运行ning)。然后 buildpack 将 运行 并创建一个完全独立的 droplet。然后,您可以使用cf local
导出该 Droplet 并将其发送到任何其他 Cloud Foundry 平台。美妙之处在于 Droplet 是平台 运行 您的应用程序所需的一切,因此它甚至不需要暂存您的应用程序,从而绕过了从 who 访问您的私有代码的问题public Cloud Foundry 上的暂存环境。
您可以做的另一件事是包含一个
.npmrc
文件,我不能 100% 确定这会起作用。 buildpack 应该配置npm
在它 运行 时查看这个文件npm install
。这里的想法是在npm
中包含一些配置选项,以允许它连接到您的存储库。不过,我不是npm
方面的专家,所以我不知道是否存在这样的选项。只是想我会提到这个以防它可能有所帮助。
因此您只需添加以下内容:
before_install:
- echo -e "machine github.ibm.com\n login $GIT_TOKEN" > ~/.netrc
给你的.travis.yml
解决方案本身就是来自 Travis docs
这个 table 在访问方面非常明确,因为我正在深入研究使用 SSH Deploy Key
方法 (git+ssh://git@github.ibm.com/org/app
) 获取我所有的私有模块,这很难做到使用单个 SSH 密钥获取所有存储库...
因此他们建议使用 User Key
方法,这是最好的方法,但我 不能应用 因为 GitHub Enterprise 将 1 个公司邮件地址绑定到 1 个 GHubE 帐户(SAML 东西)
就像我在 post 中所说的那样,我无法以正确的方式提供正确的信誉我没有根据 [=15= 确定存在 .netrc
文件] 和 API token
方法
显然它将 travis 代理设置为使用所需的登录类型(ssh 除外)!
非常感谢@DanielMikusa 的帮助!