2017-04-02 5 views
4

에서 package.json의 값 가져 오기 내 nodejs 응용 프로그램에 gitLab CI를 사용하고 있습니다. 내 YML 파일에서 docker 이미지를 작성하기 위해 스크립트를 호출해야합니다. 그러나 latest을 사용하는 대신 현재 버전의 프로젝트를 사용해야합니다.gitLab CI YML

이 버전 값은 저장소의 package.json 파일에서 찾을 수 있습니다.

latest을 현재 버전으로 바꾸려면 package.json 파일의 버전 값을 읽을 수 있습니까?

# ... 
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를 사용할 수있는 추가 패키지를 설치 반대하지 않은 경우. 당신이 그것을 설치하면 (우분투 예를 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 
2

당신은 다음과 같이 순수 불행하게도 gitlab.yml, 당신은 쉘 스크립트를 만들 수있는이 작업을 수행 할 수 있어야하고,

#!/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_IMAGE 본인이 아는

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

gitlab.yml에서의이 당신을 위해 작동합니다.

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