2017-02-08 15 views
0

現在、少し角度のあるウェブプロジェクトを進めています。そして私はGitlab CIという素晴らしいツールを見つけました。GitLab CIを使用してftpでアプリをデプロイする

私はドキュメントを読んで、ノードドッカーをセットアップしてWebアプリケーションを構築しました。それから、ビルドされたアプリケーションをftpでサーバにアップロードしたいのです。そして、これが私のトラブルの始まりです。ここではまず

は、私がドッキングウィンドウの画像にFTPをインストールするまで、だから、それは正常に動作します私のgitlab-ci.yml

image: node:7.5.0 
cache: 
    key: "$CI_BUILD_REF_NAME" 
    untracked: true 
    paths: 
    - node_modules/ 
    - dist/ 

stages: 
    - build 
# - test 
    - deploy 
    - cleanup 
# - deployProd 


runBuild: 
    before_script: 
    - npm install -g angular-cli 
    - npm install 
    stage: build 
    script: 
    - ng build --target=production --environment=test 
    except: 
    - tags 

runProdBuild: 
    before_script: 
    - npm install -g angular-cli 
    - npm install 
    stage: build 
    script: 
    - ng build --target=production --environment=prod 
    only: 
    - tags 



runDeployTest: 
    before_script: 
    - apt-get install ftp 
    variables: 
    DATABASE: "" 
    URL: "http://test.domain.de" 
    stage: deploy 
    environment: 
     name: Entwicklungssystem 
     url: https://test.domain.de 
    artifacts: 
    name: "$CI_BUILD_NAME/$CI_BUILD_REF_NAME" 
    paths: 
    - dist/ 
    expire_in: 2d 
    except: 
     - tags 
    script: 
    - echo '<?php ini_set("max_execution_time", 300); function rrmdir($dir) { if (is_dir($dir)) {  $objects = scandir($dir);  foreach ($objects as $object)  {   if ($object != "." && $object != "..")   {    if (is_dir($dir."/".$object))    {     rrmdir($dir."/".$object);  }  else   { echo "unlink :".$dir."/".$object;  unlink($dir."/".$object);  } }  }  rmdir($dir);  } } rrmdir(__DIR__."."); ?>' > delete.php 
    - lftp -d -c "set ftp:ssl-allow no; open -u $ftp_user,$ftp_password $ftp_server; cd $ftp_path; put -O . delete.php" 
    - wget "$URL/delete.php" 
    - cd ./dist 
    - zip -r install.zip . 
    - lftp -d -c "set ftp:ssl-allow no; open -u $ftp_user,$ftp_password $ftp_server; cd $ftp_path; put -O . install.zip" 
    - echo "<?php \$dateiname = __DIR__.'/install.zip'; \$ofolder = str_replace('/public','',__DIR__); exec('unzip '.\$dateiname.' -d '.\$ofolder.' 2>&1', \$out); print(implode('<br>', \$out)); unlink(\$dateiname); unlink('entpacker.php'); unlink(__DIR__.'/../delete.php'); unlink(__DIR__.'/../delete.php.1'); ?>" > entpacker.php 
    - lftp -d -c "set ftp:ssl-allow no; open -u $ftp_user,$ftp_password $ftp_server; cd $ftp_path; put -O . entpacker.php" 
    # Install 
    - wget $URL/entpacker.php 

runDeployProd: 
    before_script: 
    - apt-get install ftp 
    variables: 
    DATABASE: "" 
    URL: "http://test.domain.de" 
    stage: deploy 
    environment: 
    name: Produktivsystem 
    url: https://prod.domain.de 
    artifacts: 
    name: "$CI_BUILD_NAME/$CI_BUILD_REF_NAME" 
    paths: 
     - dist/ 
    expire_in: 2d 
    script: 
    - echo '<?php ini_set("max_execution_time", 300); function rrmdir($dir) { if (is_dir($dir)) {  $objects = scandir($dir);  foreach ($objects as $object)  {   if ($object != "." && $object != "..")   {    if (is_dir($dir."/".$object))    {     rrmdir($dir."/".$object);  }  else   { echo "unlink :".$dir."/".$object;  unlink($dir."/".$object);  } }  }  rmdir($dir);  } } rrmdir(__DIR__."."); ?>' > delete.php 
    - lftp -d -c "set ftp:ssl-allow no; open -u $ftp_user,$ftp_password $ftp_server; cd $ftp_path; put -O . delete.php" 
    - wget "$URL/delete.php" 
    - cd ./dist 
    - zip -r install.zip . 
    - lftp -d -c "set ftp:ssl-allow no; open -u $ftp_user,$ftp_password $ftp_server; cd $ftp_path; put -O . install.zip" 
    - echo "<?php \$dateiname = __DIR__.'/install.zip'; \$ofolder = str_replace('/public','',__DIR__); exec('unzip '.\$dateiname.' -d '.\$ofolder.' 2>&1', \$out); print(implode('<br>', \$out)); unlink(\$dateiname); unlink('entpacker.php'); unlink(__DIR__.'/../delete.php'); unlink(__DIR__.'/../delete.php.1'); ?>" > entpacker.php 
    - lftp -d -c "set ftp:ssl-allow no; open -u $ftp_user,$ftp_password $ftp_server; cd $ftp_path; put -O . entpacker.php" 
    # Install 
    - wget $URL/entpacker.php 
    only: 
     - tags 


cleanup: 
    stage: cleanup 
    script: 
    - rm -rf ./dist 
    - rm -rf ./node_modules 
    when: manual 

イスト。

私の質問は今:画像にftpをインストールすることは可能ですか?

または、このようなことを処理する別の方法がありますか?ウェブスペースへのsshアクセスがないので、私はsshを使うことができません。

+1

私はあなたが必要とするものをすべて追加する場所( 'npm install -g angular-cli'、他のプログラムの' apt-get'など)を作成することをお勧めします。ジョブを高速化し、失敗や予期しない結果をより弾力的にします。 'rsync'はFTP転送よりも良いオプションです。しかし、それにも1つの欠陥があります:**転送の途中で何かがうまくいかない場合はどうしたらいいですか?**実稼働サーバーでは、devサーバー上で問題になります。他の展開戦略を検討してください。 – tmt

+0

私はウェブスペースへのsshアクセスを持っていなかったので悲しいです。だから私はrsyncが動作しないと思う。このWebページは、実行する必要があるほど重要ではなく、私は手動タグでのみ生産性に配備されています。だから私は展開後にこのサイトをチェックすることができました。私は独自のDockerimageを作成しようとしましたが、うまく動作しません。 – dominic

+0

私の悪いです。私はSSHの欠如についての部分を逃した。しかし、残りの部分を再検討してください。 – tmt

答えて

1

私は解決策を得ました。提案したように私は自分のドッカー画像を作成しようとしました。そこで私はlftpもインストールできないことに気づいた。したがって、ドッカー画像を作成するには、まずapt-get updateを実行する必要があります。

私はこれをスクリプト内で試してみました。

まず、apt-getアップデートを実行してから、必要なパッケージをインストールする必要があります。

1

利用lftp代わりのftp

runDeployProd: 
    before_script: 
    - apt-get install lftp 

https://forum.gitlab.com/t/deploy-via-ftp-via-ci/2631/2

+0

これにより、次のエラーが発生します。 '$ apt-get install lftp パッケージリストを読む... ビルド依存ツリー... 状態情報を読み取る... E:パッケージlftp'を見つけることができません。だから、おそらくノードイメージはこれをインストールできませんか? – dominic

+1

hmm ...スクリプトが同じドッカーコンテナで実行されているかどうかわかりません。動作しない場合は、 'ftp'または' lftp'で新しいドッカー画像を作成することをお勧めします。そのイメージを 'node:7.5.0'の代わりに使用してください。 –

関連する問題