Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gitlab CI预定义变量${CI\u COMMIT\u BEFORE\u SHA}有时会返回奇怪的输出_Git_Gitlab_Gitlab Ci_Gitlab Ci Runner - Fatal编程技术网

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
一些场景

  • Update.gitlab-ci.yml本身,
    ${ci_COMMIT_BEFORE_SHA}
    不等于全部零(正确)
  • 通过Gitlab UI创建文本文件并添加一些内容 这就是问题发生的地方
    • 第一次编辑:运行管道后,
      ${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