.gitlab-ci.yml<\/em> \u00e0 la racine de votre projet.<\/p>\n\n\n\n1.1. Image Docker<\/h3>\n\n\n\n
L’image Docker n’a pas une grande incidence sur l’\u00e9tape de publication, essayez toutefois d’utiliser une image LTS light<\/em> dans la mesure du possible :<\/p>\n\n\n\nymlimage: node:lts-alpine<\/code><\/pre>\n\n\n\n1.2. D\u00e9finition des \u00e9tapes et param\u00e9trage de la mise en cache<\/h3>\n\n\n\nimage: node:lts-alpine\n\nstages:\n - test\n - build\n - deploy\n\n# Configuration de la mise en cache des d\u00e9pendances pour persister leur installation au sein des diff\u00e9rentes \u00e9tapes\ncache:\n key: ${CI_COMMIT_REF_SLUG}\n paths:\n - node_modules\/\n\n\n# Installation des d\u00e9pendances avant l'ex\u00e9cution des jobs\nbefore_script:\n - npm i\n\n# Vos \u00e9tapes de tests...<\/code><\/pre>\n\n\n\n1.3. Build et artifacts<\/h3>\n\n\n\n
Peu de choses \u00e0 dire niveau build<\/em>, pensez simplement \u00e0 bien ajouter les diff\u00e9rents chemins de vos artifacts<\/em>. \u00c0 la fin le paquet correspondra a ces fichiers\/dossiers, le package.json<\/em> et le README.md<\/em> :<\/p>\n\n\n\n# Vos \u00e9tapes de tests...\n\nbuild:\n stage: build\n script:\n - npm run build\n artifacts:\n paths:\n - dist\n # - vos autres dossiers\/fichiers a inclure\n <\/code><\/pre>\n\n\n\n2. D\u00e9ploiement Gitlab registry<\/h2>\n\n\n\n
Nous voulons d\u00e9ployer notre librairie sur le registry Gitlab, aux \u00e9chelles du projet et de l’instance de notre organisation. Il est n\u00e9cessaire de :<\/p>\n\n\n\n
\n
\n- Attendre la fin du build<\/em><\/li>\n\n\n\n
- Charger les artifacts<\/em><\/li>\n\n\n\n
- Configurer l’URL du package<\/em><\/li>\n\n\n\n
- S’authentifier<\/li>\n\n\n\n
- Configurer la publication a l’\u00e9chelle du projet<\/li>\n\n\n\n
- Configurer la publication a l’\u00e9chelle de l’organisation<\/li>\n\n\n\n
- Publier<\/li>\n<\/ul>\n<\/div>\n\n\n\n
publish_gitlab_registry:\n stage: deploy\n needs:\n - job: build\n artifacts: true\n dependencies:\n - build\n script:\n # Configuration de l'URL du package, remplacer l'organisation par le nom de votre organisation, le CI_PROJECT_ID est fourni par la CI\n - npm config set ${ORGANIZATION}:registry https:\/\/gitlab.com\/api\/v4\/projects\/${CI_PROJECT_ID}\/packages\/npm\/\n\n # Configuration de la publication a l'\u00e9chelle du projet, le CI_JOB_TOKEN est fourni et suffit a l'authentification\n - npm config set -- '\/\/gitlab.com\/api\/v4\/projects\/${CI_PROJECT_ID}\/packages\/npm\/:_authToken' \"${CI_JOB_TOKEN}\"\n\n # Configuration de la publication a l'\u00e9chelle de l'instance, le CI_JOB_TOKEN est fourni et suffit a l'authentification\n - npm config set -- '\/\/gitlab.com\/api\/v4\/packages\/npm\/:_authToken' \"${CI_JOB_TOKEN}\"\n\n # Publication\n - npm publish\n\n # Nous conseillons de ne pas trigger la publication a chaque CI, ici la r\u00e8gle demande si le tag existe, restreignant ainsi la publication au tag \n rules:\n - if: $CI_COMMIT_TAG<\/code><\/pre>\n\n\n\n3. D\u00e9ploiement sur NPMJS<\/h2>\n\n\n\n
Enfin pour publier sur NPMJS ce paquet scoped<\/em> (suivant le nom du paquet dans le package.json<\/em>), la logique est la m\u00eame, seule la configuration change :<\/p>\n\n\n\npublish_npm:\n stage: deploy\n needs:\n - job: build\n artifacts: true\n dependencies:\n - build\n script:\n # Configuration pour la publication sur NPMJS, NPM_TOKEN est le token NPM de type automation g\u00e9n\u00e9r\u00e9 plus t\u00f4t et ajout\u00e9 aux variables d'environnement de votre CI Gitlab\n - npm config set -- '\/\/registry.npmjs.org\/:_authToken' \"${NPM_TOKEN}\"\n\n # Etant donn\u00e9 que le paquet est scope, il est n\u00e9cessaire de sp\u00e9cifier le fait qu'il est public\n - npm publish --access public\n rules:\n - if: $CI_COMMIT_TAG<\/code><\/pre>\n\n\n\nR\u00e9sum\u00e9 .gitlab-ci.yml :<\/strong><\/p>\n\n\n\nimage: node:lts-alpine\n\nstages:\n - test\n - build\n - deploy\n\ncache:\n key: ${CI_COMMIT_REF_SLUG}\n paths:\n - node_modules\/\n\nbefore_script:\n - npm install\n\n# Vos \u00e9tapes de tests...\n\nbuild:\n stage: build\n script:\n - npm run build\n artifacts:\n paths:\n - dist\n\npublish_gitlab_registry:\n stage: deploy\n needs:\n - job: build\n artifacts: true\n dependencies:\n - build\n script:\n - npm config set ${ORANIZATION}:registry https:\/\/gitlab.com\/api\/v4\/projects\/${CI_PROJECT_ID}\/packages\/npm\/\n - npm config set -- '\/\/gitlab.com\/api\/v4\/projects\/${CI_PROJECT_ID}\/packages\/npm\/:_authToken' \"${CI_JOB_TOKEN}\"\n - npm config set -- '\/\/gitlab.com\/api\/v4\/packages\/npm\/:_authToken' \"${CI_JOB_TOKEN}\"\n - npm publish\n rules:\n - if: $CI_COMMIT_TAG\n\npublish_npm:\n stage: deploy\n needs:\n - job: build\n artifacts: true\n dependencies:\n - build\n script:\n - npm config set -- '\/\/registry.npmjs.org\/:_authToken' \"${NPM_TOKEN}\"\n - npm publish --access public\n rules:\n - if: $CI_COMMIT_TAG<\/code><\/pre>\n\n\n\n4. La suite<\/h2>\n\n\n\n4.1. NPMJS<\/h3>\n\n\n\n
La publication sur NPMJS vous notifiera par mail, vous pourrez ensuite utiliser le paquet depuis n’importe quel projet en l’installant comme n’importe quelle autre d\u00e9pendance :<\/p>\n\n\n\n
npm install @myscope\/mypackage<\/code><\/pre>\n\n\n\n\u26a0\ufe0f Il est impossible de publier plusieurs fois le m\u00eame paquet avec la m\u00eame version, pensez donc \u00e0 bump<\/em> la version dans le package.json<\/em> \u00e0 chaque publication\ufe0f<\/strong><\/p>\n\n\n\nVous pouvez aussi g\u00e9rer votre paquet depuis votre compte NPMJS.<\/p>\n\n\n\n
4.2. Gitlab registry<\/h3>\n\n\n\n
Vous retrouverez votre paquet dans le repository<\/em> de votre projet dans Packages & Registries -> Package Registry<\/em><\/strong><\/p>\n\n\n\nIl vous suffira de param\u00e9trer votre authentification au registry<\/a> selon votre pr\u00e9f\u00e9rence. J’utilise personnellement un personnal access token<\/em> avec un scope api<\/em>. Une fois authentifi\u00e9, vous pouvez installer votre paquet comme n’importe quelle autre d\u00e9pendance :<\/p>\n\n\n\nnpm install @myscope\/mypackage<\/code><\/pre>\n\n\n\nTout devrait fonctionner pour peu que votre paquet soit fonctionnel !<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"Il est tout \u00e0 fait possible de publier un paquet NPM aussi bien sur NPMJS que sur les diff\u00e9rentes \u00e9chelles (projet et instance) du Gitlab registry via la CI Gitlab.<\/p>\n","protected":false},"author":4,"featured_media":1588,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21],"tags":[40,37,63,64],"meta_box":{"card_category":"D\u00e9veloppement"},"_links":{"self":[{"href":"https:\/\/qongzi.com\/wp-json\/wp\/v2\/posts\/1587"}],"collection":[{"href":"https:\/\/qongzi.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/qongzi.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/qongzi.com\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/qongzi.com\/wp-json\/wp\/v2\/comments?post=1587"}],"version-history":[{"count":0,"href":"https:\/\/qongzi.com\/wp-json\/wp\/v2\/posts\/1587\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/qongzi.com\/wp-json\/wp\/v2\/media\/1588"}],"wp:attachment":[{"href":"https:\/\/qongzi.com\/wp-json\/wp\/v2\/media?parent=1587"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/qongzi.com\/wp-json\/wp\/v2\/categories?post=1587"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/qongzi.com\/wp-json\/wp\/v2\/tags?post=1587"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}