Рубрики
Uncategorized

Gitlab CI/CD для пакетов NPM

Пару недель назад ИТ -команда в моей компании рассказала о том, чтобы иметь хранилища для пакетов, которые мы … Tagged с DevOps, NPM, Git, Gitlab.

Пару недель назад ИТ -команда в моей компании рассказала о наличии репозиториев для пакетов, которые мы делаем для наших приложений 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»