我通常运行以下命令来部署特定的应用程序:
compass compile -e production --force
git add .
git commit -m "Some message"
git push
git push production master
如何将其整理成一个命令?
我需要能够自定义提交消息。因此命令可能类似于:
deploy -m "Some message"
答案 0 :(得分:5)
有两种可能性:
一个脚本,正如其他人回答的那样
在.bash_profile中定义的函数:
deploy() {
compass compile -e production --force &&
git add . &&
git commit -m "$@" &&
git push &&
git push production master
}
没有参数,你会有第三个选项,即别名:
alias deploy="compass compile -e production --force &&
git add . &&
git commit -m 'Dumb message' &&
git push &&
git push production master"
答案 1 :(得分:2)
您可以创建一个执行所需操作的函数,并将提交消息作为参数传递:
function deploy() {
compass compile -e production --force
git add .
git commit "$@"
git push
git push production master
}
将它放在.bashrc
中,你就可以了。
答案 2 :(得分:1)
您可以制作shell脚本。看起来像这样的东西(注意没有输入验证等):
#!/bin/sh
compass compile -e production --force
git add .
git commit -m $1
git push
git push production master
将其保存到myscript.sh
,chmod +x
,然后执行./myscript.sh "Some message"
之类的操作。
答案 3 :(得分:0)
您可以为此
编写shell脚本#!/bin/bash
compass compile -e production --force
git add .
git commit -m $1
git push
git push production master
将此保存到'deploy'并在其上执行chmod 7xx。现在您可以将它用作./deploy“Some message”
答案 4 :(得分:0)
您可以将这些命令写入名为deploy.sh的文件中。
然后使其成为可执行文件并以sh deploy.sh
运行您甚至可以通过导出保存脚本的路径将其添加到路径中。
答案 5 :(得分:0)
每个人都提到编写脚本,这可能是最好的方法。
但是有一天你可能会想用另一种方式 - 用&&amp ;,合并命令,例如:
cd ../ && touch abc
将在父目录中创建一个文件“abc”:)
只是让你知道这个事情,对于这个特殊情况(以及99%的其他人),请看看其他答案:)
答案 6 :(得分:0)
我会努力使命令不仅仅是当前目录。最常用的方法之一是在BASH脚本中使用getopt。确保已安装getopt,创建deploy.sh
然后chmod 755 deploy.sh
,然后执行以下操作:
#!/bin/bash
declare -r GETOPT=/usr/bin/getopt
declare -r ECHO='builtin echo'
declare -r COMPASS=/path/to/compass
declare -r GIT=/path/to/git
sanity() {
# Sanity check our runtime environment to make sure all needed apps are there.
for bin in $GETOPT $ECHO $COMPASS $GIT
do
if [ ! -x $bin ]
then
log error "Cannot find binary $bin"
return 1
fi
done
return 0
}
usage() {
$CAT <<!
${SCRIPTNAME}: Compile, add and commit directories
Usage: ${SCRIPTNAME} -e <env> [-v]
-p|--path=<path to add>
-c|--comment="Comment to add"
-e|--environment=<production|staging|dev>
Example:
$SCRIPTNAME -p /opt/test/env -c "This is the comment" -e production
!
}
checkopt() {
# Since getopt is used within this function, it must be called as
# checkopt "$@"
local SHORTOPT="-hp::c::e::"
local LONGOPT="help,path::,comment::,environment::"
eval set -- "`$GETOPT -u -o $SHORTOPT --long $LONGOPT -n $SCRIPTNAME -- $@`"
while true
do
case "$1" in
-h|--help)
return 1
;;
-|--path)
PATH="$2"
shift 2
;;
-c|--comment)
COMMENT=$2
shift 2
;;
-e|--environment)
ENV="$2"
shift 2
;;
--)
shift
break
;;
*)
$ECHO "what is $1?"
;;
esac
done
}
if ! sanity
then
die "Sanity check failed - Cant find proper system binaries"
fi
if checkopt $@
then
$ECHO "Running Compass Compile & Git commit sequence..."
$COMPASS compile -e $ENV --force
$GIT add $PATH
$GIT commit -m $COMMENT
$GIT push
$GIT push ENV master
else
usage
exit 1
fi
exit 0