It is a common practice to perform git pull
on dev/staging/production server(s). I frequently do so myself; I perform git pull almost 100 times a day on my production server running linux.
I figure, it's time to make a script to improve that.
pull.sh will do these 3 commands
I've tried create my pull.sh here
#!/bin/bash
function pull {
git pull
password
service nginx reload
}
pull ;
Result
After running the script that I have, I still got prompt to input the password.
Any hints / helps / suggestions will be much appreciated !
You can use expect
script to interact with git authentication:
#!/usr/bin/expect -f
spawn git pull
expect "ass"
send "your_password\r"
interact
It waits for "ass" text (that matches "Password", "password", "passphrase") and then it sends your password.
That script can be called from another bash script that will restart your server:
# Call script directly since the shell knows that it should run it with
# expect tool because of the first script line "#!/usr/bin/expect -f"
./git-pull-helper-script.sh
# Without the first line "#!/usr/bin/expect -f" the file with commands
# may be sent explicitly to 'expect':
expect file-with-commands
# Restart server
service nginx reload
The way to handle a passphrase is to use an ssh agent: that way, you only need to type in your passphrase once.
I have this in my dev user's ~/.bash_profile
# launch an ssh agent at login, so git commands don't need to prompt for password
# ref: http://stackoverflow.com/a/18915067/7552
SSH_ENV=$HOME/.ssh/env
if [[ -f ~/.ssh/id_rsa ]]; then
function start_agent {
# Initialising new SSH agent...
ssh-agent | sed 's/^echo/#&/' > "${SSH_ENV}"
chmod 600 "${SSH_ENV}"
source "${SSH_ENV}" > /dev/null
ssh-add
}
# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
source "${SSH_ENV}" > /dev/null
agent_pid=$(pgrep ssh-agent)
(( ${agent_pid:-0} == $SSH_AGENT_PID )) || start_agent
unset agent_pid
else
start_agent
fi
fi
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With