2017-04-02 44 views
4

我對我的nodejs應用程序使用gitLab CI。在我的YML文件中,我需要調用腳本來構建Docker鏡像。但是,而不是使用latest我需要使用該項目的當前版本。在gitLab CI中獲取package.json的值YML

該版本值可以在存儲庫的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 

回答

4

如果你不反對安裝額外的軟件包,你可以使用jq它允許更大的靈活性(可以在倉庫中都Ubuntu和高山)。 一旦你安裝它(例如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 
2

你可能不能夠做到這純粹是在gitlab.yml不幸的是,你可以按如下方式創建一個shell腳本,並檢查該到你的源代碼控制

#!/bin/sh 
args=("[email protected]") 
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_IMAGEgitlab.yml

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

據我所知這應該爲你工作。

Thank you to DarrenN and dbaba on Github for his package.json version extract shell function

+1

您還可以修剪空格:https://gist.github.com/DarrenN/8c6a5b969481725a4413#gistcomment-1678696 – user3142695