【问题标题】:Gitlab CI : get all commit changes from the push/mergeGitlab CI:从推送/合并中获取所有提交更改
【发布时间】:2021-08-22 08:14:07
【问题描述】:

我想要自上次推送以来已更改的文件。

目前我可以找到上次提交的差异。但是,如果我在一次推送中有多个提交,则只考虑最后一次提交:

git diff-tree --no-commit-id --name-only -r ${CI_COMMIT_SHA} | while read FILE ; do
    infra="$(echo ${FILE} | cut -d'/' -f1)";
    application="$(echo ${FILE} | cut -d'/' -f2)";
    project="$(echo ${FILE} | cut -d'/' -f3)";

    if [[ " ${seen[*]} " == *"$project"* ]]
    then
        echo "Project ${project} has already been sync"
        continue
    fi

    seen+=($project)

    if [[ ! -d "${SCRIPT_DIR}/${infra}" ]] || [[ ! -d "${SCRIPT_DIR}/${infra}/${application}" ]] || [[ ! -d "${SCRIPT_DIR}/${infra}/${application}/${project}" ]]
    then
        echo "${SCRIPT_DIR}/${infra}/${application}/${project} not a valid folder"
        continue
    fi

    pushd ${SCRIPT_DIR}/${infra}/${application}/${project}
    echo "Auto delivery ${project}"
    bash delivery.sh auto

    retVal=$?
    if [ $retVal -ne 0 ]; then
        echo "Error (code $retVal) : check rsync return"
        exit 1
    fi
    popd

done

delivery.sh 中,我对上次提交 (${CI_COMMIT_SHA}) 中更改的文件夹执行 rsync。但是,我想考虑上一次推送/MR 中的所有文件夹,而不仅仅是提交。

这可能吗?

【问题讨论】:

  • 这个工作流程似乎有点脆弱。如果出于某种原因,delivery.sh 一次推送失败会发生什么。然后你修复导致delivery.sh 在下一次提交中失败的问题并推送它。 delivery.sh 应该只查看最后一次提交,还是重做之前失败的提交?对我来说,设计delivery.sh 来根据当前快照进行分析似乎更安全,而不仅仅是最近的更改。
  • 对于它的价值,我不知道有一种方法可以做你所要求的,尽管可能有一个服务器端相当于 GitLab 中的 reflog。
  • @joanis 我在问题中添加了更多代码。回答您的问题:delivery.sh 是一个 rsync 命令(比一个文件夹更复杂)。我想知道我是否可以使用 push_id 而不是 ${CI_COMMIT_SHA}。因为实际上,如果我在一次推送中进行两次提交,那么只有最后一个会在 ${CI_COMMIT_SHA} 中,然后,只有最后一个会同步

标签: git gitlab gitlab-ci


【解决方案1】:

解决方案是使用 ^! 用户 git diff :

git diff --no-commit-id --name-only -r ${CI_COMMIT_SHA}^!

使用^! 参数,它将观察与父提交的差异。

【讨论】:

    猜你喜欢
    • 2016-01-15
    • 2021-04-15
    • 2016-09-08
    • 2021-02-11
    • 1970-01-01
    • 2017-11-25
    • 2015-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多