Как дать Circle CI SSH доступ к моему серверу?
У меня есть некоторые вопросы и проблемы с моим решением CI и CD.
рельсы: 4.2
Капистрано: 3.4.0
приложение размещается на отдельном сервере.
прямо сейчас у меня есть рабочий процесс, работающий с развертыванием разработки, постановки и производства через терминал. Я также подключил Circle CI, хорошо работающий на этих ветвях.
Я не могу найти, как настроить Circle CI для использования Capistrano для развертывания. Все настроено пользователь сервера в конфигурации Capistrano.
Как дать Circle CI SSH доступ к my deploy
пользователей? Потому что теперь я должен предоставить пароль для пользователя.
2 ответов
используйте ключи SSH для аутентификации. Вы также можете использовать его для своих собственных сеансов SSH, потому что это более удобно и безопасно (редкий случай!) чем аутентификация пароля. Проверьте в этом уроке о том, как установить его.
затем вставьте свой закрытый ключ в CircleCI в Project Settings -> SSH Permissions
, как описано здесь. Вам нужно скопировать закрытый ключ с локального компьютера из пары ключей, открытый ключ которой вы добавили в deploy
пользователей на сервере. CircleCI тогда будет иметь SSH-доступ к вашему серверу.
вы можете установить имя хоста в домен, который указывает на ваш сервер или IP вашего сервера, или оставить его пустым, чтобы этот ключ использовался во всех хостах.
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
-
на сервере создайте нового пользователя и добавьте его в
www-data
группы. Сделайте его владельцем всего РЕПО рекурсивно. Предположим, что этот пользователь называетсяrepo-boss
.$ chown -R repo-boss:www-data repo/
- на локальном машина создает новую пару ключей 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
и теперь приходит 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
конечно, вам не нужно использовать рабочие процессы. Вы также можете достичь этого в базовом водопаде. Но мне гораздо больше нравилось разбивать две части на разные согласованные работы.