2017-04-02 12 views
4

でpackage.jsonの値を取得する私のnodejsアプリケーションにgitLab CIを使用しています。私のYMLファイルでは、ドッカー画像を作成するためにスクリプトを呼び出す必要があります。しかし、latestを使用する代わりに、現在のバージョンのプロジェクトを使用する必要があります。gitLab CI YML

このバージョンの値は、リポジトリのpackage.jsonファイルにあります。

latestを現在のバージョンで置き換えるpackage.jsonファイルのバージョン値を読み取ることはできますか?あなたは引数でこのスクリプトを実行し

#!/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 

を次のようにシェルスクリプトを作成し、

あなたのソース管理にこれを確認することができ、残念ながら gitlab.ymlに純粋にこれを行うことができない場合があります

# ... 
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

あなたは(Ubuntuとアルパインの両方のためのリポジトリで利用可能)はるかに柔軟性を可能jqを使用することができ、追加のパッケージをインストール反対されていない場合。 あなたがそれをインストールすると(Ubuntuの上の例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