(持续集成和GIT) - 如何简单地使用bash脚本



在我的公司,我遵循以下工作流程(我认为它可以定义为一种"持续集成")

工作流:

  • 我们有3个固定分支(staging/master/production)
  • stagingproduction的每次推送都会自动部署到暂存/生产服务器

我们使用git的方式如下:
(假设我正在开发新功能"A")

  1. 我从Master创建了一个新分支(例如分支"a")
  2. 如果我想向客户端显示我的更改,我会将A合并为statement并推送它
  3. 一旦完成我在A上的工作,我就在Master上合并回A并推送Master
  4. 为了实时发送更改,我合并了生产部门的Master并推送生产

每次我必须部署实时/分期工作时,我都觉得git checkout ...git pull ..bla bla很无聊/很耗时。

因此,我生成了以下bash脚本,目的是简单地将分支A部署到单个命令deploy.sh live A

#!/bin/bash
function merge() {  
SOURCE=$1
DEST=$2
echo ''
echo "--- Merging $SOURCE with $DEST ---" 
echo "--> Checkout $DEST ..." 
git checkout $DEST
echo "--> Pull $DEST ..."
git pull --ff-only origin $DEST
if [ $? -ne 0 ]
then
echo "ERROR: Could not PULL" 
return 1
fi
echo "--> Merging $SOURCE with $DEST ..."
# --ff-only trigger errors if merge/pull is not possible 
git merge --ff-only $SOURCE --no-edit  
if [ $? -ne 0 ]
then
echo "ERROR: Could not MERGE"
return 1
fi
echo "--> Push $DEST ..."
git push origin $DEST
return 0
}
function deploy() {
MODE=$1
SOURCE_BRANCH=$2
echo ''
echo "### START ###"
echo ''
echo "--- Pull changes from Master ---"
git checkout $SOURCE_BRANCH
git pull --progress --no-edit --no-stat -v --progress origin master

merge $SOURCE_BRANCH 'staging'
status=$?
if [ $status -ne 0 ]
then
echo "ERROR: STEP 1" >&2
exit 1
fi
if [ $MODE = "live" ]
then
merge $SOURCE_BRANCH 'master'
status=$?
if [ $status -ne 0 ]
then
echo "ERROR: STEP 2"
return 1
fi
merge 'master' 'production'
status=$?
if [ $status -ne 0 ]
then
echo "ERROR: STEP 3"
return 1
fi
fi
echo ''
echo "### END ###"
echo ''
}
MODE=$1;
SOURCE_BRANCH=$2;
if [ -z "$MODE"  -o -z "$SOURCE_BRANCH" ]
then
echo "Usage:"
echo ""
echo  "MODE BRANCH_NAME (MODE: live|staging)"
else
if git show-ref --verify --quiet "refs/heads/$SOURCE_BRANCH";
then
deploy $MODE $SOURCE_BRANCH
else
echo ''
echo "Error: Branch $SOURCE_BRANCH not found"
fi
fi

问题:

我对GIT和BASH脚本都很陌生。所以我想知道上面的工作流程/脚本是否可以?欢迎任何推荐
(同时我很高兴将此作为资源分享)

如果脚本能满足您的需要,那么它就很好,您的bash技能也会变得更好。

IMHO,整件事可以写10行,会更好,但这是品味的问题。

除了if,你在之前的评论中得到了建议,没有必要用三行来呼应status,echo-e"\n"或者printf,这大约减少了10%的行数。

可以使用${v:?message}进行检查并失败

不需要这些函数,也不需要在代码中添加return。

这是从pytonish/whateverish编码风格到bash中更紧凑的编码风格的一步。不是每个人都喜欢它,也不是每个人觉得它很好,所以你必须自己尝试。

作为一个例子,我用5行bash重写了250行(过于清晰)python;windows/python的同事认为它不够清晰(但后来他不能写bash),另外5行额外的评论对他来说更好;另一位同事发现它好多了(长时间不滚动是一个原因)。

你必须自己尝试,在花时间欣赏每一种风格之前,不要忽视其中的一种。

相关内容

  • 没有找到相关文章