Я использую 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
.
package.json
для проекта my-package
имеет скрипт prepare
, используемый для сборки пакета при установке.Выглядит это так:
"scripts": {
"prepare": "npm run build",
"clean": "npx rimraf lib",
"build": "npm run clean && tsc && npx gulp"
},
my-package
находится в закрытом репо, и поэтому, чтобы решить начальные проблемы с разрешениями, мне пришлось создать ключи ssh, я добавил открытый ключ в my-package
GitLabrepo в разделе Deploy Keys, согласно этим инструкциям 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 и readme.Результат ls node_modeuls/my-package
на платформе ci, приведенной выше, приводит к следующему:
$ ls node_modules/my-package/
package.json
readme.md
и, конечно, поскольку мой пакет не загружается, тесты не запускаются с использованием этого пакета.
За последние 2 дня я испробовал миллион различных изменений в обоих проектах.И ничто из того, что я делаю, не работает на платформе CI (но все время это всегда работает локально ?).Мне бы очень хотелось узнать, что я упускаю из виду, поскольку, поскольку это работает на моем компьютере, должен быть способ работать на платформе CI.
Есть мысли?