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

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

该版本值可以在存储库的package.json文件中find。

是否有可能读取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 

如果你不反对安装额外的软件包,你可以使用jq ,这样可以提供更多的灵活性(可以在Ubuntu和Alpine中使用)。 一旦你安装了它(例如apt-get update && apt-get install -yqq jq ):

 - 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 

你可能不能在gitlab.yml完全做到这一点,不幸的是,你可以创build一个shell脚本如下,并检查到您的源代码pipe理

 #!/bin/sh args=("$@") CI_REGISTRY_IMAGE=${args[0]} PACKAGE_VERSION=$(cat package.json \ | grep version \ | head -1 \ | awk -F: '{ print $2 }' \ | sed 's/[",]//g' \ | tr -d '[[:space:]]') CONTAINER_RELEASE_IMAGE=$CI_REGISTRY_IMAGE\:$PACKAGE_VERSION cd /opt/core/bundle && docker build -t $CONTAINER_RELEASE_IMAGE . docker push $CONTAINER_RELEASE_IMAGE 

然后用$CI_REGISTRY_IMAGE中的参数$CI_REGISTRY_IMAGE执行这个脚本

 # ... build: stage: build script: # ... - chmod +x script.sh - ./script.sh $CI_REGISTRY_IMAGE 

据我所知,这应该适合你。

感谢Github上的DarrenN和dbaba的package.json版本提取shell函数