【发布时间】:2019-10-12 00:37:08
【问题描述】:
我使用 GitLab 作为我的 npm 包存储库。使用此包的项目正在使用 ssh url 并以特定标签为目标。消费项目 package.json 中的条目如下所示:"my-package": "git+ssh://git@gitlab.com:company/repo.git#tag"
现在澄清一下,这在我的开发机器上运行良好。我可以擦除我的 node_modules 和 package-lock.json 文件,清除我的 npm 缓存,然后成功构建和安装 npm i 和 my-package。
my-package 项目的package.json 有一个prepare 脚本,用于在安装时构建包。它看起来像这样:
"scripts": {
"prepare": "npm run build",
"clean": "npx rimraf lib",
"build": "npm run clean && tsc && npx gulp"
},
my-package 在私有仓库中,因此为了解决初始权限问题,我必须创建 ssh 密钥,我将公钥添加到部署密钥部分下的 my-package GitLab 仓库中,按照这些说明https://docs.gitlab.com/ee/ssh/#deploy-keys。
消费项目中的.gitlab-ci.yml 文件将私钥包含在 ssh-agent 中,如下所示:
before_script:
- apk update
- 'which ssh-agent || ( apk update -y && apk add openssh-client -y )'
- mkdir -p ~/.ssh
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | ssh-add -
- ssh-keyscan -H gitlab.com >> ~/.ssh/known_hosts
而且我没有权限问题。消费项目 CI 的测试阶段如下所示:
test:
stage: test
script:
- apk update
- apk --no-cache add --update nodejs nodejs-npm git
- npm install
- ls node_modules/my-package/
- npm run lint
- npm run test
奇怪的是,npm install 没有在这里下载和构建my-package(就像在我的电脑上一样),它只安装 package.json 和自述文件。上面 ci 平台上ls node_modeuls/my-package 的结果是这样的:
$ ls node_modules/my-package/
package.json
readme.md
当然,由于我的包没有被下载,因此使用该包的测试无法运行。
在过去的 2 天里,我在这两个项目上尝试了上百万种不同的调整排列。我所做的一切都不能在 CI 平台上工作(但它始终在本地工作????)。我真的很想知道我忽略了什么,因为这可以在我的计算机上运行,那么必须有一种方法可以在 CI 平台上运行。
有什么想法吗?
【问题讨论】:
-
所以,我通过不排除 my-package 中的构建目录来临时工作。在本地构建,从
.gitignore中删除/lib并向上推构建目录会导致构建目录被拉入 CI。这可行,但并不理想,因为人们很容易忘记在推送之前构建项目,因为这应该发生在包的消耗中。 -
同样的问题,我不想将
dist文件夹上传到我的仓库。"prepare"看起来是正确的选择,但似乎没有被触发。有更新吗?
标签: node.js git npm gitlab gitlab-ci