在gitLab CI YML中获取package.json的值

use*_*695 9 yaml node.js gitlab-ci package.json

我正在为我的nodejs应用程序使用gitLab CI.在我的YML文件中,我需要调用脚本来构建一个docker镜像.但不是使用latest我需要使用当前版本的项目.

可以package.json在存储库的文件中找到此版本值.

是否可以读取package.json文件的版本值以替换latest当前版本?

# ...
variables:
  CONTAINER_RELEASE_IMAGE: $CI_REGISTRY_IMAGE:latest         # need version value instead of latest 

build:
  stage: build
  script:
    # ...
    - cd /opt/core/bundle && docker build -t $CONTAINER_RELEASE_IMAGE .
    - docker push $CONTAINER_RELEASE_IMAGE
Run Code Online (Sandbox Code Playgroud)

dx_*_*_dt 20

我认为version从您那里检索的最简单方法package.json是使用节点本身。

build:
  stage: build
  script:
    - export VERSION=$(node -p "require('./package.json').version")
    - export CONTAINER_RELEASE_IMAGE=$CI_REGISTRY_IMAGE:$VERSION
    - cd /opt/core/bundle && docker build -t $CONTAINER_RELEASE_IMAGE .
    - docker push $CONTAINER_RELEASE_IMAGE
Run Code Online (Sandbox Code Playgroud)

-p/标志--print表示计算表达式并打印结果。它在功能上相当于使用-e/--eval=标志并将表达式包装在console.log(...).

  • 这非常有效。无需安装其他软件包或使用其他图像或加载额外文件。 (2认同)

Jak*_*nia 11

如果您不反对安装可以使用的其他软件包,那么可以jq提供更大的灵活性(在Ubuntu和Alpine的存储库中都可用).安装后(例如apt-get update && apt-get install -yqq jq在Ubuntu上):

- export VERSION=$(cat package.json | jq -r .version)
- cd /opt/core/bundle && docker build -t $CI_REGISTRY_IMAGE:$VERSION .
- docker push $CI_REGISTRY_IMAGE:$VERSION
Run Code Online (Sandbox Code Playgroud)


小智 7

变量:

PACKAGE_VERSION: $(cat package.json | grep version | head -1 | awk -F= "{ print $2 }" | sed 's/[version:,\",]//g' | tr -d '[[:space:]]')  `
Run Code Online (Sandbox Code Playgroud)

在您的工作或模板中

.package-template: &package_template 
image: docker-hub.registry.integ.fr.auchan.com/docker:latest
stage: package 
tags: 
  - stocks
script:
  - export VERSION= ``eval $PACKAGE_VERSION``
  - echo "======> Getting VERSION:  $VERSION" `
Run Code Online (Sandbox Code Playgroud)