【问题标题】:How to give Circle CI SSH access to my server?如何让 Circle CI SSH 访问我的服务器?
【发布时间】:2015-09-08 20:58:52
【问题描述】:

我对 CI 和 CD 解决方案有一些疑问和问题。

导轨:4.2

Capistrano:3.4.0

应用程序托管在私人服务器上。

现在我的工作流程是通过终端部署开发、登台和生产。 我还连接了在这些分支上运行良好的 Circle CI。

我找不到如何设置 Circle CI 以使用 Capistrano 进行部署。 一切都在 Capistrano 配置中使用服务器用户进行配置。

如何向我的deploy 用户授予 Circle CI SSH 访问权限?因为现在我必须为用户提供密码。

【问题讨论】:

    标签: ruby-on-rails capistrano circleci


    【解决方案1】:

    使用 SSH 密钥进行身份验证。您也可以将它用于您自己的 SSH 会话,因为它比密码验证更方便和安全(很少见!)。查看this tutorial 了解如何设置。

    然后,将您的私钥粘贴到 Project Settings -> SSH Permissions 中的 CircleCI,如 here 所述。您需要从您将其公钥添加到服务器上deploy 用户的密钥对中从本地计算机复制私钥。然后,CircleCI 将拥有对您服务器的 SSH 访问权限。

    您可以将主机名设置为指向您的服务器或服务器 IP 的域,或者将其留空,以便在所有主机中使用此密钥。

    【讨论】:

    • 我用什么hostname
    • 如果您有一个域指向您的服务器,请使用它。否则,使用 IP 地址。
    • 我会尽快尝试一下?
    • 本地 SSH 的密钥运行良好,即使我的域有 SSH 密钥,仍然要求在 Circle 上输入密码。
    • 感谢所有帮助! ?
    【解决方案2】:

    CircleCI 版本 2 使用工作流构建和部署

    让我们假设以下非常基本的 PHP 应用程序。 Apache 配置指向/web。 Git 会忽略以* 结尾的文件和文件夹。

    __repo
      |__.circleci
      |  |__config.yml
      |__.git
      |__tests
      |  |__features
      |  |__behat.yml
      |__scripts
      |  |__deploy.sh
      |__web
      |  |__node_modules*
      |  |__index.php
      |  |__styles.scss
      |  |__gulpfile.js
      |  |__styles.css*
      |__.gitignore
    
    1. 在服务器上创建一个新用户并将其添加到www-data 组。使其递归地拥有整个回购。假设这个用户叫repo-boss

      $ chown -R repo-boss:www-data repo/

    2. 在您的本地计算机上创建一个新的 SSH 密钥对。将私钥添加到 CircleCI 的后端,然后查看我们稍后需要的结果指纹。将公钥添加到/home/repo-boss/.ssh/authorized_keys

    现在让我们假设deploy.sh 脚本包含以下非常基本的命令。

    #!/usr/bin/env bash
    
    # Set script to exit on errors.
    set -e
    
    # Get script's absolute location.
    DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
    
    # Change to repo root.
    cd ${DIR};
    cd ..
    
    # Git pull.
    git status
    git pull
    
    # Run Gulp.
    cd web/
    gulp sass
    

    现在,CircleCI 的config.yml 出现了,它可以让整个工作正常进行(当然,在您至少一次将必要的东西拉到服务器上之后)。 deploy 只会在测试成功完成时运行。

    version: 2
    jobs:
      build:
        docker:
          - image: circleci/php:7.1-apache-node-browsers
    
        working_directory: ~/repo-name
    
        steps:
          - checkout
    
          - run:
              name: Whatever you need to get your app up and running.
              command: |
                command1 # Have a look at https://github.com/leymannx/drupal-circleci-behat/blob/develop/.circleci/config.yml for a more detailed example.
                command3
                command4
    
          - run:
              name: Run Tests.
              command: |
                behat --no-snippets -f pretty -o std
    
      deploy:
        machine:
          enabled: true
        working_directory: ~/repo-name
        steps:
          - checkout
          - run:
              name: Fix ssh Could not resolve hostname
              command: |
                ssh-keyscan 123.45.67.89 >> ~/.ssh/known_hosts # Add live server IP to known hosts.
                ssh-keyscan 555.45.67.89 >> ~/.ssh/known_hosts # Dev server, too.
    
          - add_ssh_keys: # add private SSH key from CircleCI account based on fingerprint.
              fingerprints:
                - "14:09:a1:b2:b3:c4:d5:e6:f7:g8:h9:81:"
    
          - run:
              name: Deploy master.
              command: if [ "${CIRCLE_BRANCH}" == "master" ]; then ssh repo-boss@123.45.67.89 'cd /var/www/repo/scripts && . deploy.sh'; else echo "Skipped"; fi
          - run:
              name: Deploy develop.
              command: if [ "${CIRCLE_BRANCH}" == "develop" ]; then ssh repo-boss@555.45.67.89 'cd /var/www/repo/scripts && . deploy.sh'; else echo "Skipped"; fi
    
    workflows:
      version: 2
      build-and-deploy:
        jobs:
          - build:
              filters:
                branches:
                  only:
                    - develop
                    - master
          - deploy:
              requires:
                - build
              filters:
                branches:
                  only:
                    - develop
                    - master
    

    当然,您不需要使用工作流。您也可以在基本瀑布中实现这一点。但我更喜欢将构建和部署这两个部分拆分到不同的协同作业中。

    【讨论】:

    • 这是circleci的版本1还是2?
    • @MosesLiaoGZ – 一年前我猜这是 v1。我现在这样做:github.com/leymannx/drupal-circleci-behat/blob/develop/…(检查底部的注释部分,您必须将私钥添加到 Circle CI 后端,并将匹配的公钥添加到服务器上的 authorized_keys)。
    • 但是如果你们按照fabric文件的方式做事会更好,因为ssh进入服务器后,有很多命令要运行
    • @MosesLiaoGZ – 你在服务器上运行什么命令取决于你。提供一个部署脚本,可以在您通过 SSH 连接到服务器后执行该脚本。这个脚本可以保存你需要的任何命令。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 2016-04-06
    • 1970-01-01
    • 2023-03-06
    • 2020-12-13
    • 2010-11-20
    • 2019-12-29
    相关资源
    最近更新 更多