web-dev-qa-db-ja.com

gitLab CIYMLでpackage.jsonの値を取得する

NodejsアプリケーションにgitLabCIを使用しています。 YMLファイルで、Dockerイメージを作成するためのスクリプトを呼び出す必要があります。しかし、latestを使用する代わりに、プロジェクトの現在のバージョンを使用する必要があります。

このバージョン値は、リポジトリの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
12
user3142695

追加のパッケージをインストールすることに反対しない場合は、jqを使用できます。これにより、柔軟性が大幅に向上します(UbuntuとAlpineの両方のリポジトリで利用可能)。インストールしたら(たとえば、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
9
Jakub Kania

残念ながら、これをgitlab.ymlで純粋に行うことはできない場合があります。次のようにシェルスクリプトを作成し、これをソース管理にチェックインすることができます。

#!/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の引数gitlab.ymlを指定してこのスクリプトを実行します。

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

私の知る限り、これはあなたのために働くはずです。

GithubのDarrenNとdbabaのpackage.jsonバージョン抽出シェル関数に感謝します

2
Peter Reid

変数:

PACKAGE_VERSION: $(cat package.json | grep version | head -1 | awk -F= "{ print $2 }" | sed 's/[version:,\",]//g' | tr -d '[[:space:]]')  `

あなたの仕事やテンプレートで

.package-template: &package_template 
image: docker-hub.registry.integ.fr.auchan.com/docker:latest
stage: package 
tags: 
  - stocks
script:
  - export VERSION= ``eval $PACKAGE_VERSION``
  - echo "======> Getting VERSION:  $VERSION" `
2
syahiaoui

Dockerを使用してpackage.jsonバージョンを取得できます。この例では、「最新」およびpackage.jsonバージョンでタグ付けしてプッシュします。

。gitlab-ci.yml

docker-build-master:
  # Official docker image.
  image: docker:latest
  stage: build
  services:
    - docker:dind
  before_script:
    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
  script:
    - export VERSION=$(docker run --rm -v "$PWD":/app:ro -w /app node:slim node -p "require('./package.json').version")
    - docker build --pull -t "$CI_REGISTRY_IMAGE" .
    - docker Push "$CI_REGISTRY_IMAGE:latest"
    - docker image tag "$CI_REGISTRY_IMAGE:latest" "$CI_REGISTRY_IMAGE:$VERSION"
    - docker Push "$CI_REGISTRY_IMAGE:$VERSION"
  only:
    - master
0
danitetus