Пару недель назад ИТ -команда в моей компании рассказала о наличии репозиториев для пакетов, которые мы делаем для наших приложений PHP, чтобы мы могли переключиться на более естественное использование композитора. Мы оставили встречу с идеями, но не с конкретным решением, ни обещанием исследовать эту тему. Несколько дней назад мне нужно было сделать пакет JavaScript после создания репозитория на нашем Gitlab, я заметил вариант для Пакеты и реестры
Анкет Поскольку мне поразило, что такой вариант существует, я решил немного изучить его и использовать его для этого пакета JavaScript, если это возможно. Вот что я узнал в процессе.
Опции
Gitlab предлагает несколько реестров, с которыми вы можете работать: Composer, Conan, Maven, NPM, Nuget, PYPI. Я только опробовал реестр NPM, но с другими также следует легко работать.
Публикация пакета NPM в реестр
На самом деле это был мой первый раз, когда я делал пакет NPM. Поэтому я хотел бы порекомендовать этот пост Пошаговое пошаговое построение и публикация пакета TypeScript NPM для первых таймеров, как я. Это было очень легко понять, и никаких шагов не было пропущено.
Прежде всего в твоем package.json
Вы должны охватить свой проект, потому что Gitlab требует, чтобы пакеты были оценены. Например:
{ "name": "@scope/example-package-name", "version": "1.0.0" }
После того, как у нас есть эта настройка, если мы используем .npmrc
файл или NPM Config Set Registry
Мы можем сказать NPM, где мы хотим, чтобы он опубликовал наш пакет. Выглядит примерно так:
//gitlab.example.com/api/v4/projects/${PROJECT_ID}/packages/npm/:_authToken=${GITLAB_DEPLOY_TOKEN}
Если репозиторий установлен на внутреннее или частное, вам нужно использовать токен развертывания Gitlab. О том, как получить один, вы можете прочитать в Развертывание токенов документация.
После бега NPM Publish
Вы должны увидеть свой пакет в реестре вашего репозитория.
И вы должны увидеть версию 1.0.0, в которой говорится, что она была выдвинута вручную.
CI/CD
Чтобы сделать нашу жизнь и жизнь наших коллег, мы можем хорошо использовать систему CI/CD Gitlabs. Мы можем использовать .gitlab-ci.yml
конфигурация, которая выглядит так:
stages: - build - test - publish build: stage: build only: - tags cache: key: build-cache paths: - node_modules/ - lib/ - .npmrc policy: push script: - echo "//gitlab.example.com/api/v4/projects/${CI_PROJECT_ID}/packages/npm/:_authToken=${CI_JOB_TOKEN}">.npmrc - docker run -v $(pwd):/app -v /home:/home -w="/app" -u="$(id -u):$(id -g)" -e HOME node:14 npm install - docker run -v $(pwd):/app -v /home:/home -w="/app" -u="$(id -u):$(id -g)" -e HOME node:14 npm run build test: stage: test only: - tags cache: key: build-cache paths: - node_modules/ - lib/ - .npmrc policy: pull script: - docker run -v $(pwd):/app -v /home:/home -w="/app" -u="$(id -u):$(id -g)" -e HOME node:14 npm run test lint: stage: test only: - tags cache: key: build-cache paths: - node_modules/ - lib/ - .npmrc policy: pull script: - docker run -v $(pwd):/app -v /home:/home -w="/app" -u="$(id -u):$(id -g)" -e HOME node:14 npm run lint publish: stage: publish only: - tags cache: key: build-cache paths: - node_modules/ - lib/ - .npmrc policy: pull script: - docker run -v $(pwd):/app -v /home:/home -w="/app" -u="$(id -u):$(id -g)" -e HOME node:14 npm version --no-git-tag-version ${CI_COMMIT_TAG} - docker run -v $(pwd):/app -v /home:/home -w="/app" -u="$(id -u):$(id -g)" -e HOME node:14 npm publish
Примечательные моменты:
- На стадии сборки мы делаем
.npmrc
Файл, который содержит путь реестра, созданный с использованием переменных среды CI - Все этапы работают только на теги , особый способ сообщить системе CI/CD активировать только при помечении кода в своем репозитории
- Мы строим кэш для node_modules, lib и .npmrc как таковые, мы ограничиваем количество сценариев, которые нам нужно запустить после шага сборки
- Только этап сборки заставляет кэш только другие используют его, он определяется политикой Push/Pull Policy
- На стадии публикации мы используем
NPM версия-no-git-tag-version $ {ci_commit_tag}
командованиеNPM версия
это шумная команда, которая помещает и коммит код, если он обнаруживает каталог, как репозиторий GIT Вот почему мы используем--нет-гит-tag-версия
здесь. Поскольку сцена была вызвана нами, отметив код, у нас есть$ {Ci_commit_tag}
Переменная среда доступна для использования для обмена версиями пакетов. После этого мы просто опубликоваем пакет.
Примечание У меня не было бегуна Gitlab, который был настроен на то, чтобы использовать Docker обычно, и на машине установили узел и NPM Так что мне пришлось использовать Docker Run
команды, как показано. Так что … не самый элегантный способ сделать это.
Конечный результат заключается в следующем:
Теперь разработчикам не нужно запускать какие -либо сценарии локально, просто чтобы посвятить себя репозиторию и пометить код.
Если вы хотите поддержать меня писать, не стесняйтесь купить мне чашку кофе.
Оригинал: «https://dev.to/kristijankanalas/gitlab-ci-cd-for-npm-packages-4ncj»