【问题标题】:How to deploy to custom server from Travis with script如何使用脚本从 Travis 部署到自定义服务器
【发布时间】:2018-10-14 09:06:45
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    嗯,有两种方法来找我,来解决你的问题。

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

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

    【讨论】:

    • 但是如何将该私钥添加到 travis.yml 或 bash 脚本中?
    【解决方案2】:

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

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

    服务器设置.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 的推送。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-07
      • 1970-01-01
      相关资源
      最近更新 更多