Ich versuche gitlab-ci und capistrano zu verwenden, um meine Symfony-Anwendung bereitzustellen. Aber ich kann nicht mithilfe von SSH bereitstellen, indem ich Schlüssel in den Andockfenster einfüge. Das Skript fordert bei der Verbindung weiterhin zur Passworteingabe auf. Ich verwende eine lokale Instanz von gitlab.Gitlab-ci konfigurieren docker runner für den Einsatz mit SSH-Schlüssel
In SSH_PRIVATE_KEY privaten Variable Gitlab, habe ich den privaten Schlüssel des git Benutzers und in SSH_SERVER_HOSTKEYS, das Ergebnis des ssh-keyscan -H 192.168.0.226
Befehl.
In Datei authorized_keys aus dem Ordner .ssh deploy, ich den öffentlichen Schlüssel des Git-Benutzers.
Hier sind die Konfigurationsdateien:
Gitlab-ci.yml:
image: php:7.1
cache:
paths:
- vendor/
before_script:
# Install dependencies
- bash ci/docker_install.sh > /dev/null
- bash ci/ssh_inject.sh
stages:
- deploy
deploy:
stage: deploy
script:
- apt-get install ruby-full -yqq
- gem install capistrano -v 3.8.0
- gem install capistrano-symfony
- cap production deploy
environment:
name: production
url: http://website.com
only:
- master
ssh_inject.sh:link
#!/bin/bash
set -xe
# Install ssh-agent if not already installed, it is required by Docker.
# (change apt-get to yum if you use a CentOS-based image)
which ssh-agent || (apt-get update -y && apt-get install openssh-client -y)
# Run ssh-agent (inside the build environment)
eval $(ssh-agent -s)
# Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store
ssh-add <(echo "$SSH_PRIVATE_KEY")
mkdir -p ~/.ssh
[[ -f /.dockerenv ]] && echo "$SSH_SERVER_HOSTKEYS" > ~/.ssh/known_hosts
deploy.rb:
# config valid only for current version of Capistrano
lock '3.8.0'
set :application, 'symfony'
set :repo_url, '[email protected]:symfony.git'
# Default deploy_to directory is /var/www/my_app_name
set :deploy_to, '/home/symfony'
set :symfony_env, "prod"
set :composer_install_flags, '--no-dev --prefer-dist --no-interaction --optimize-autoloader'
set :symfony_directory_structure, 3
set :sensio_distribution_version, 5
# symfony-standard edition directories
set :app_path, "app"
set :web_path, "web"
set :var_path, "var"
set :bin_path, "bin"
set :app_config_path, "app/config"
set :log_path, "var/logs"
set :cache_path, "var/cache"
set :symfony_console_path, "bin/console"
set :symfony_console_flags, "--no-debug"
# asset management
set :assets_install_path, "web"
set :assets_install_flags, '--symlink'
# Share files/directories between releases
set :linked_files, %w(app/config/parameters.yml)
set :linked_dirs, %w(web/uploads)
# Set correct permissions between releases, this is turned off by default
set :permission_method, false
set :file_permissions_paths, ["var/logs", "var/cache"]
set :file_permissions_users, ["apache"]
before "deploy:updated", "deploy:set_permissions:acl"
after "deploy:updated", "symfony:assetic:dump"
und production.rb:
server '192.168.0.226', user: 'deploy', roles: %w{app db web}
Was könnte falsch sein? Ich habe versucht, forward_agent auf true zu setzen, aber es funktioniert nicht immer.
Wenn ich die Docker Behälter manuell und installieren Sie alle Abhängigkeiten aufbauen kann die SSH Verbindung ohne zu fragen, für Passwort festgelegt werden ...
EDIT:
Gibt es etwas in der Läuferkonfiguration hinzuzufügen? Hier ist sie:
concurrent = 1
check_interval = 0
[[runners]]
name = "Docker runner"
url = "http://gitlab.local/ci"
token = "mytoken"
executor = "docker"
[runners.docker]
tls_verify = false
image = "php:7.1"
privileged = false
disable_cache = false
volumes = ["/cache"]
[runners.cache]
Wenn du docker verwendest, musst du im docker Container agieren, aber das sollte in .gitlab-ci und in deinem cap Skript funktionieren. Aber um ehrlich zu sein, ich sehe keinen Punkt in Container ein Deployment Runner - andere Geschichte, wenn Sie den Läufer für die Bereitstellung und andere (ci) Zeug verwenden. – Rufinus
Ich bevorzuge Docker für Updates Zweck zu verwenden. Aber 'shell' zu verwenden, scheint großartig! –