如何使用 travis ci 配置 SSH 连接?

Posted

技术标签:

【中文标题】如何使用 travis ci 配置 SSH 连接?【英文标题】:How to config an SSH connection with travis ci? 【发布时间】:2021-08-14 11:50:23 【问题描述】:

我正在尝试为 docker 项目设置 travis ci 配置,但我在 .travis.yml 中与服务器的 ssh 连接卡住了。我找不到此视频https://www.youtube.com/watch?v=xLWDOLhTH38&ab_channel=DevOpsJourney 的 yml 文件,我已经将我的 ssh 私钥添加到 travis ci 设置中,我当前工作的 .travis.yml 文件是:

arch:
  - amd64

env:
  - IMGNAME=myImageName

language: java

services:
  - docker

before_install:
  - mvn clean install
  - docker build -t $IMGNAME .

script:
  - echo test

after_success:
  - docker login -u $DHUB_USERNAME -p $DHUB_PASSWORD
  - echo test

【问题讨论】:

您能详细说明您要完成的工作吗?您希望能够通过 ssh 进入正在运行的构建代理吗? 不,就像 YouTube 视频中解释的那样,我正在尝试为在服务器上运行的 docker 应用程序配置 CI/CD(测试和部署)。 【参考方案1】:

经过大量尝试和测试,我做到了这一点,我很高兴它按我想要的方式工作,但我确信它不是那么好。

    创建您的 Travis CI 帐户 启用与您的 Github 存储库的连接 将 .travis.yml 文件添加到项目的 src 目录(这也应该是您的 git 存储库,但您可以根据需要进行编辑) 由于我们将部署一个 docker 项目,我们需要在部署之前测试 docker 构建是否工作。这里部署将在我们的私有服务器上,这就是为什么我们需要从 Travis 服务器使用 SSH 连接到我们的服务器。 enter image description here
      我不知道如果有防火墙规则阻止你,即使你有 SSH 密钥也无法连接到服务器?。因此,如果您的 docker 应用程序必须连接到任何服务器,请不要忘记将 Travis 服务器的 IP 地址添加到这些服务器的白名单(防火墙规则)中(来自您的主机提供商平台或服务器命令行)。查找 Travis CI 服务器的当前 IP 地址 ➢ https://dnsjson.com/nat.travisci.net/A.json 对于 SSH 密钥,生成密钥后,将其添加到服务器的授权密钥中
// From your (windows, I don't know how it is for other OS but I think that it is pretty the same) computer execute this command to generate your SSH key,
// to make it in pem format which is needed for the travis ci ssh key format,
// accept all default paramaters, no paraphrase (travis doesn't like it),
// and for the location paramater also (you can change it if you want)

ssh-keygen -m PEM -t rsa -b 4096 -C "your_email@example.com"

// Inside your server execute this command
// this will add your SSH key to your server authorized SSH keys
type $env:USERPROFILE\.ssh\id_rsa.pub | ssh [user]@[yourServerIP] "cat >> .ssh/authorized_keys"

    现在您的私钥在 id_rsa 文件中,而您的公钥在 id_rsa.pub 中

      cat /id_rsa 将其复制并粘贴到项目的 Travis ci SSH 密钥配置 (https://travis-ci.com/github/[githubUserName]/[github_repo]/settings) cat /id_rsa.pub 将其复制并粘贴到您的 github 项目设置的部署密钥中 现在 Travis 的 SSH 代理将为您完成工作

    在您的 .travis.yml 中:

arch:
  - amd64

language: java #Default install Gradle, Maven, Ant
sudo: true # ./mvnw ==> for the permission denied error 

services:
  - docker

before_install:
  - chmod +x mvnw # ./mvnw ==> for the permission denied error

script:
  - mvn clean install # not sure if it's useful before a docker build
  - docker build -t $DHUB_TAG .

after_success:
  - eval "$(ssh-agent -s)"
  #- chmod 600 ./deploy_key ==> don't need that anymore
  - echo -e "Host $SERVER_IP_ADDRESS\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
  #- ssh-add ./deploy_key ==> don't need that anymore
  - ssh $SERVER_USER@$SERVER_IP_ADDRESS "
    cd $WORK_FOLDER &&
    git config user.name $GITHUB_USERNAME &&
    git config user.email $GITHUB_EMAIL &&
    git pull 'https://$GITHUB_USERNAME:$GITHUB_PASSWORD@github.com/$GITHUB_REPO' production &&
    git config --unset-all user.name &&
    git config --unset-all user.email &&
    sudo apt update &&
    sudo apt install maven &&
    mvn clean install &&
    docker login -u $DHUB_USERNAME -p $DHUB_PASSWORD &&
    docker build -t $DHUB_TAG . &&
    docker push $DHUB_TAG &&
    docker pull $DHUB_TAG &&
    docker stop $DOCKER_CONTAINER_NAME || true && docker rm $DOCKER_CONTAINER_NAME || true &&
    docker run -p 8080:8080 --name=$DOCKER_CONTAINER_NAME -d $DHUB_TAG"
要添加您的 $params,请转到您的项目设置 enter image description here 文件中未解释的内容的小演练 制作 arch: amd64 ==> 选择 CPU 架构 services: docker ==> 将启动 docker 服务 建立 SSH 连接后 更新 git 仓库 mvn clean install 用于目标文件夹和 jar 构建您的 docker 镜像,将其推送到 docker hub 拉动它并运行它 "docker stop $DOCKER_CONTAINER_NAME || true && docker rm $DOCKER_CONTAINER_NAME || true" ==> 如果 docker 容器不存在

此外,如果您希望将 $anyValue 隐藏在 Travis ci 日志中,您可以将它们添加到 Travis 设置中。

感谢您的宝贵时间。

【讨论】:

以上是关于如何使用 travis ci 配置 SSH 连接?的主要内容,如果未能解决你的问题,请参考以下文章

Travis-Ci 的 pypi 部署如何安全?

text 自动操作.gitmodules,以便Travis CI从公共URL而不是SSH URL中提取子模块。

Travis.ci 配置和执行 npm 脚本

使用 Travis CI 配置 Mysql 5.7

使用Travis-CI自动化部署Hexo博客

webpack配置篇(三十五):持续集成和Travis CI