我正在尝试在.gitlab-ci.yml中调用shell命令,其相关部分是:
image: docker:latest
services:
- docker:dind
stages:
- build
- deploy
...
build:
stage: build
script:
- apt-get update -y
- GIT_TAG=$(git tag | tail -1)
- GIT_TAG=$(/usr/bin/git tag | tail -1)
- docker ...
但是,所有前三个Shell命令调用均失败,均带有“ command not found
”错误。 git
命令失败确实很奇怪,因为它必须在启动script
部分之前首先获取git repo。即,我可以看到git
在工作,但是我自己不能使用它。
有什么办法可以使其正常工作?
答案 0 :(得分:1)
您会看到git
在单独的步骤中工作,因为GitLab可能正在另一个容器中进行操作。它们使您的容器保持清洁,因此您必须自己安装依赖项。
由于您使用的映像基于Alpine Linux,因此安装git
的命令为:
apk add --no-cache git
如果您只需要git信息,也可以跳过整个过程并使用predefined environment variables。 $CI_COMMIT_TAG
将包含标签,而$CI_COMMIT_SHA
将包含提交哈希。
答案 1 :(得分:0)
,这是CI_COMMIT_TAG的定义:
CI_COMMIT_TAG-提交标记名称。仅在构建标签时显示
表示-当您将提交推送到GitLab时,它将启动没有CI_COMMIT_TAG
变量的管道。当您在该提交上创建标签并将该标签推入GitLab时,将启动另一个管道(这次是标签,而不是提交)。在这种情况下,将出现CI_COMMIT_TAG
。
@xpt-感谢投票的信任,并要求将其写下来作为答案,希望这对社区有所帮助!