【问题标题】:Interrogations about "servless CI with git" bash script关于“带有 git 的无服务器 CI”bash 脚本的询问
【发布时间】:2014-05-18 17:46:11
【问题描述】:

我参考了 David Gageot 的优秀文章:Serverless CI with git

让我在此处包含大卫的脚本:

#!/bin/bash
if [ 0 -eq `git remote -v | grep -c push` ]; then
  REMOTE_REPO=`git remote -v | sed 's/origin//'`
else
  REMOTE_REPO=`git remote -v | grep "(push)" | sed 's/origin//' | sed 's/(push)//'`
fi

if [ ! -z "$1" ]; then
  git add .
  git commit -a -m "$1"
fi

git pull

if [ ! -d ".privatebuild" ]; then
  git clone . .privatebuild
fi

cd .privatebuild
git clean -df
git pull

if [ -e "pom.xml" ]; then
  mvn clean install

  if [ $? -eq 0 ]; then
    echo "Publishing to: $REMOTE_REPO"
    git push $REMOTE_REPO master
  else
    echo "Unable to build"
    exit $?
  fi
fi

如果我对这个脚本的理解正确,它会将初始 git 存储库克隆到第二个隐藏的 git 存储库,将在其中运行单元测试。

如果单元测试通过,第二个隐藏存储库将被推送到初始工作存储库。

我的问题如下:

  • 应该如何使用这个脚本?通过调用它而不是 git commit 命令?作为预提交挂钩?
  • 如果在运行单元测试时对初始 git 存储库进行了更改,会发生什么情况?

【问题讨论】:

    标签: git bash git-merge git-commit git-remote


    【解决方案1】:

    该脚本有点过时,但它是这样工作的:您可以使用该脚本来推送本地更改或提交并推送本地更改。我在较新版本的脚本中摆脱了后一种行为,因为它应该有一个单一的责任。在运行构建之前,它会从远程拉取,克隆整个 repo,从这个克隆运行构建,然后推送。如果同时其他人推送更改,则推送将失败。如果您同时在您的存储库中进行更改,这些更改对于克隆是未知的。

    这是我现在每天使用的版本https://github.com/dgageot/dotfiles/blob/master/bin/git-build

    希望这会有所帮助。

    【讨论】:

    • 谢谢大卫。我去看看新版本。
    猜你喜欢
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多