Gitlab CI预定义变量${CI\u COMMIT\u BEFORE\u SHA}有时会返回奇怪的输出
我想检查在上一次提交和最近一次提交之间更改的文件Gitlab CI预定义变量${CI\u COMMIT\u BEFORE\u SHA}有时会返回奇怪的输出,git,gitlab,gitlab-ci,gitlab-ci-runner,Git,Gitlab,Gitlab Ci,Gitlab Ci Runner,我想检查在上一次提交和最近一次提交之间更改的文件 git diff ${CI_COMMIT_BEFORE_SHA} ${CI_COMMIT_SHA} --name-only 有关 ${CI\u COMMIT\u BEFORE\u SHA}:上一次最新提交出现在 分支机构。在中始终为0000000000000000000000000000000000 合并请求的管道 因此,根据我的假设,当有一些更改但没有发生合并请求时,${CI\u COMMIT\u BEFORE\u SHA}不应该是00000
git diff ${CI_COMMIT_BEFORE_SHA} ${CI_COMMIT_SHA} --name-only
有关
${CI\u COMMIT\u BEFORE\u SHA}:上一次最新提交出现在
分支机构。在中始终为0000000000000000000000000000000000
合并请求的管道
因此,根据我的假设,当有一些更改但没有发生合并请求时,${CI\u COMMIT\u BEFORE\u SHA}
不应该是0000000000000000000000000000。但是,最近我用下面的.gitlab-ci.yml进行了测试
stages:
- info
- deploy
variables:
GIT_STRATEGY: fetch
GIT_CHECKOUT: "true"
information:
stage: info
script:
- echo ${CI_COMMIT_BRANCH}
- echo ${CI_COMMIT_BEFORE_SHA}
- echo ${CI_COMMIT_SHA}
- export CHANGES=`git diff ${CI_COMMIT_BEFORE_SHA} ${CI_COMMIT_SHA} --name-only`
- echo ${CHANGES}
only:
variables:
- $CI_COMMIT_BRANCH == "test"
tags:
- master
一些场景
${ci_COMMIT_BEFORE_SHA}
不等于全部零(正确)- 第一次编辑:运行管道后,
不等于所有零(正确),并且${CI\u COMMIT\u BEFORE\u SHA}
被更改为新的数字${CI\u COMMIT\u SHA}
- 第二次编辑:
已全部更改为零!?和${CI\u COMMIT\u BEFORE\u SHA}
与前一个保持相同${CI_COMMIT_SHA}
${CI\u COMMIT\u BEFORE\u SHA}
的行为是这样的?我在其他项目中也看到这种行为。这不是很奇怪吗?还是我的误会
下面是Gitlab的runner面板的输出
如果查看变量的文档页面: 然后您将看到,在合并请求的管道中,
CI\u COMMIT\u-BEFORE\u-SHA
和CI\u-COMMIT\u-SHA
始终是0000000000000000000000000000000000000000
这可能就是你面临的问题
您可以创建自己的变量:
export COMMIT\u BEFORE\u SHA=“$(git rev parse HEAD~1)”
export COMMIT_SHA=“$(git rev解析头~0)”
因此,示例如下所示:
阶段:
-信息
-部署
变量:
GIT_策略:获取
GIT_签出:“正确”
资料:
阶段:信息
脚本:
-export COMMIT_BEFORE_SHA=“$(git rev parse HEAD~1)”
-export COMMIT_SHA=“$(git rev解析头~0)”
-回显“${COMMIT_BEFORE_SHA}”
-回显“${COMMIT\u SHA}”
-export CHANGES=“`git diff”${COMMIT\u BEFORE\u SHA}”“${COMMIT\u SHA}”--仅限名称“
-回显“${CHANGES}”
仅:
变量:
-$CI_提交_分支==“测试”
标签:
-主人
如果查看变量文档页面:
然后您将看到,在合并请求的管道中,CI\u COMMIT\u-BEFORE\u-SHA
和CI\u-COMMIT\u-SHA
始终是0000000000000000000000000000000000000000
这可能就是你面临的问题
您可以创建自己的变量:
export COMMIT\u BEFORE\u SHA=“$(git rev parse HEAD~1)”
export COMMIT_SHA=“$(git rev解析头~0)”
因此,示例如下所示:
阶段:
-信息
-部署
变量:
GIT_策略:获取
GIT_签出:“正确”
资料:
阶段:信息
脚本:
-export COMMIT_BEFORE_SHA=“$(git rev parse HEAD~1)”
-export COMMIT_SHA=“$(git rev解析头~0)”
-回显“${COMMIT_BEFORE_SHA}”
-回显“${COMMIT\u SHA}”
-export CHANGES=“`git diff”${COMMIT\u BEFORE\u SHA}”“${COMMIT\u SHA}”--仅限名称“
-回显“${CHANGES}”
仅:
变量:
-$CI_提交_分支==“测试”
标签:
-主人
Skipping Git submodules setup
Executing "step_script" stage of the job script
00:01
$ echo ${CI_COMMIT_BRANCH}
test
$ echo ${CI_COMMIT_BEFORE_SHA}
02c9b473c269ff69f54eac42fd5d1c4ace98888e
$ echo ${CI_COMMIT_SHA}
c3d04bd751d4199aa6f2a5c43f3da55100ce42a3
$ export CHANGES=`git diff ${CI_COMMIT_BEFORE_SHA} ${CI_COMMIT_SHA} --name-only`
$ echo ${CHANGES}
test.txt
Cleaning up file based variables
00:00
Job succeeded
Executing "step_script" stage of the job script
00:00
$ echo ${CI_COMMIT_BRANCH}
test
$ echo ${CI_COMMIT_BEFORE_SHA}
0000000000000000000000000000000000000000
$ echo ${CI_COMMIT_SHA}
62f73dcf2ae8672752fa1ace7a77b97d33ee49df
$ export CHANGES=`git diff ${CI_COMMIT_BEFORE_SHA} ${CI_COMMIT_SHA} --name-only`
fatal: bad object 0000000000000000000000000000000000000000
$ echo ${CHANGES}
Cleaning up file based variables
00:00
Job succeeded