如何使用脚本从Travis部署到自定义服务器

时间:2018-06-26 00:52:06

标签: shell ubuntu ssh continuous-integration travis-ci

我当前的CI具有github钩子来运行travis测试。我想将deploy功能添加到我的Travis配置中,该功能运行一个bash脚本,该脚本将SSH到我的服务器中并执行git pull。这可能吗?例如:

  • Travis运行测试,然后运行部署provider: script bash scripts/deploy.sh
  • 脚本ssh进入我的服务器(pw可以是Travis ENV var)
  • 部署脚本执行git pull

注意:我的服务器是Ubuntu,我具有完全的root访问权限和专用IP。

2 个答案:

答案 0 :(得分:0)

嗯,有两种方法可以解决您的问题。

在需要输入密码时,可以使用用TCL编写的 expect 命令与ssh命令进行交互。您可以检查此article

第二种方法不是使用密码,而是使用私钥来访问远程服务器,而无需输入密码。您可以使用ssh-keygen生成一对密钥,它们将分别存储为$ home / .ssh / id_rsa和$ home / .ssh / id_rsa.pub,带有后缀pub的密钥是公钥,您可以将它在远程服务器上:$ home / .ssh / authorized_keys,那么您将不再需要密码

答案 1 :(得分:0)

如果您对服务器具有root访问权限,则将以下代码保存在本地计算机中名为“ server-setup.sh”的文件中。

chmod +x server-setup.sh
execute ./server-setup.sh 

server-setup.sh

#!/usr/bin/env bash

echo "Creating a separate user who have deploy access on your server"
read -p 'Server Address ' SERVER
read -p 'Deploy User Name ' USER

# Generate ssh key pair
ssh-keygen -t rsa -N "" -f ${USER}_rsa
PUB_KEY=$(cat ${USER}_rsa.pub)
PRV_KEY=$(cat ${USER}_rsa)

# Encrypt private key with your CI tool
travis encrypt-file ${USER}_rsa ./travis/${USER}_rsa.enc --add --force

# Add rsa keys to gitignore
echo ${USER}_rsa >> .gitignore
echo ${USER}_rsa.pub >> .gitignore

ssh -t -o StrictHostKeyChecking=no root@"${SERVER}" << EOF
sudo adduser --disabled-password --gecos "" ${USER}
echo "travis ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/${USER}
chmod 0440 /etc/sudoers.d/${USER}
sudo usermod -a -G docker ${USER}

sudo su ${USER}
cd ~
mkdir ~/.ssh
chmod 700 ~/.ssh
echo "${PUB_KEY}" >> ~/.ssh/authorized_keys

# Add ssh key to help cloning private github repo
echo "${PRV_KEY}" >> ~/.ssh/github_rsa
chmod 600 ~/.ssh/github_rsa
eval \$(ssh-agent)
ssh-add ~/.ssh/github_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
echo IdentityFile ~/.ssh/github_rsa >> ~/.ssh/config
EOF

echo *********************************************************************************************************
echo "Go to https://github.com/"$(git config --get travis.slug)"/settings/keys/new and add the below text :-"
echo ---------------------------------------------------------------------------------------------------------
echo ${PUB_KEY}
echo ---------------------------------------------------------------------------------------------------------

请参见此处的一个示例.travis.yml文件和travis / deploy.sh文件:Example

注意:但是git pull并不是一个好主意。最好在travis本身上构建工件或任何依赖项,并使用scp或其他方式通过ssh将这些工件从travis复制到服务器。或首先转到您的服务器,拉出github存储库,然后在服务器上配置该存储库以接受来自travis的推送。

相关问题