在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函数