2017-04-13 8 views
0

私はgitlab-ciとcapistranoを使ってsymfonyアプリケーションをデプロイしようとしています。しかし、私はドッカーにキーを注入してSSHを使用して展開することはできません、スクリプトは、接続時にパスワードを求めるプロンプトを表示し続けます。私はgitlabのローカルインスタンスを使用しています。 gitlabのSSH_PRIVATE_KEYプライベート変数でGitlab-ciはSSHキーを使用してデプロイするためのドッカーランナーを設定します

、私は、ssh-keyscan -H 192.168.0.226コマンドの結果をGitのユーザーの秘密鍵、およびSSH_SERVER_HOSTKEYSにを追加しました。
deployの.sshフォルダのauthorized_keysに、私はgitユーザの公開鍵を置いています。ここで

は、コンフィギュレーションファイルは、次のとおりです。

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" 

production.rb:

server '192.168.0.226', user: 'deploy', roles: %w{app db web} 

間違っている可能性が何?私はforward_agentをtrueに設定しようとしましたが、eatherは動作していません。私は手動でドッキングウィンドウコンテナを構築し、すべての依存関係をインストールした場合

、SSHのコネクションは、パスワードの入力を求めずに確立することができます...ここで

は誤りです: password error

はEDIT:

ランナー設定で追加するものはありますか?ここでは、次のとおりです。

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] 

答えて

0

誰かがなぜそれがgitlab-ci.ymlにある必要があるのか​​について考えがあるなら、私は理解したいと思います。

+0

ドッカーを使うなら、ドッカーコンテナー内で動作する必要がありますが、これは.gitlab-ciとキャップスケッチで動作するはずです。しかし、正直言って、私は配備ランナーをコンテナ化する際のポイントを見ていません - 配備ランナーと他の(ci)のものを使用するならば、他の話。 – Rufinus

+0

私は更新目的のためにドッカーを使用することを好む。しかし、 'shell 'を使うことはそうでなければ素晴らしいようです! –

0

あなたはgitlab-runnerユーザーとgitlabランナーのSSHキーを作成する必要があります。

次に、このキーのpubkeyをサーバーにauthorized_keysファイルとして追加します。 gitlab-ci.ymlssh_inject.shコンテンツを移動することによって解決

+0

ご回答ありがとうございます。しかし、それは動作していません、私は公開鍵をファイルをdeploy_userのファイルに追加し、SSH_PRIVATE_KEYをgitlab-runner秘密鍵で変更しましたが、まだパスワードを要求しています。私はssh [email protected]をパスワードなしでgitlab-runnerユーザの端末から行うことができます。私は何かが足りないと思う。 –

+0

ランナーにはどのエグゼクターを使用しますか? sock、virtualbox、docker + machine、docker-ssh + machine、docker、docker-ssh、shell、kubernetes?以前私はドッカーを使用していた –

+0

が奇妙です。私の純粋なデプロイメントランナーのために私はciテスト 'docker + machine'のために' shell 'を使います。 – Rufinus

関連する問題