我在nodejs应用中使用gitLab CI,在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
7条答案
按热度按时间j13ufse21#
我认为从
package.json
检索version
的最简单方法是使用node本身。-p
/--print
标志表示计算表达式并打印结果。它在功能上等效于使用-e
/--eval=
标志并将表达式 Package 在console.log(...)
中。rggaifut2#
如果你不反对安装额外的软件包,你可以使用
jq
,它允许更多的灵活性(在Ubuntu和Alpine的仓库中都有).一旦你安装了它(例如Ubuntu上的apt-get update && apt-get install -yqq jq
):6vl6ewon3#
变量:
在作业或模板中
o3imoua44#
仅仅在
gitlab.yml
中可能无法完成此操作,不幸的是,您可以创建如下shell脚本并将其签入源代码控制然后在
gitlab.yml
中使用参数$CI_REGISTRY_IMAGE
执行此脚本据我所知,这对你应该有用。
Thank you to DarrenN and dbaba on Github for his package.json version extract shell function
to94eoyn5#
你可以使用docker来获取package.json版本,在这个例子中,我们用“latest”和package.json版本来标记和推送:
xzabzqsa6#
您可以使用YAML锚功能设置可在作业脚本中使用的变量。
然后在脚本部分的某处:
.gitlab-ci.yml
:exdqitrt7#
也许这会对其他人有用,我用grep做了这件事: