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
追加のパッケージをインストールすることに反対しない場合は、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
残念ながら、これを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
私の知る限り、これはあなたのために働くはずです。
変数:
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" `
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