【GitLab 公式 を訳してみた】PHPプロジェクトでComposerとNPMを使う方法(展開にはSCPを使用)

法律: IT 解説記事 GitLab CI WordPress フノス(訳者)

  GitLab DocumentationGitLab Continuous Integration (GitLab CI)GitLab CI 設定サンプル集
Dplをデプロイ・ツールとして使う>現在のページ

  

 
 

  このガイドは、「PHPプロジェクトの内容をNPMスクリプトでコンパイルする」開発形態について取り上げます。

  PHPやNode JSのバージョンは適宜選択することができます。

 ここではPHPとNodeJSの両方が入ったDocker環境を想定して説明を進めてまいります。
 なので、まずは「.gitlab-ci.yml」ファイルで、「image」を指定しますね。

======================
image: tetraweb/php
======================

  次に、「zip/unzip」パッケージをインストールして、「Composer」を使う準備をします。
 これは「before_script」の部分に設定します。

======================
before_script:
  - apt-get update
 
- apt-get install zip unzip
 
- php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
 
- php composer-setup.php
 
- php -r "unlink('composer-setup.php');"
======================

  さて、これで依存関係にあるソフトをすべて手に入れましたね。
 上のコマンドで「Composer」と「NPM」をインストールする準備が整いました。

 あとはその2つをインストールするだけです。
 上の文に続けて、次の3行を追記しましょう。 

======================
 - php composer.phar install
 - npm install
 - npm run deploy
======================

  ちなみに、最後の「npm run deploy」については、これから使っていくGulp(ビルドツール)のスクリプトです。
 Gulpには次の役割を任せます。

  1. CSS & JSのコンパイル
  2. spritesの作成
  3. その他アセット(画像、フォント)のコピー
  4. ストリングスの交換


 これらの加工がされたファイルは全て「build」フォルダに移し替えられ、ライブサーバーへのデプロイが準備されていきます。
 

  ライブサーバーに送られたファイルを変換する方法

  これには、複数の方法( rsync, scp, sftp )があります。
 今回は「scp」を使っていきます。

  まずは、GitLab 秘密変数(gitlab.example/your-project-name/variablesのようなアドレス)にアクセスして、「STAGING_PRIVATE_KEY」という変数を探します。この変数に、サーバーのプライベートsshキーを定義します。

  セキュリティの関係上、ユーザーがこれらのファイルにアクセスするのは、内容を変更せざるをえないときだけにしましょう。

  プライベートキーはありましたか?無かったら作ってくださいね。

 変数を設定したら、「before_script」に次の設定を加えます。

======================
before_script:
  # - ....
  - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
  - mkdir -p ~/.ssh
  - eval $(ssh-agent -s)
  - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
======================

 

  この設定の意味:

  1. ssh-agent」をきちんと設定しないと、その後の「apt-get」つまり、ソフトをインストールすることができない。
  2. ~/.ssh」フォルダを作る
  3. bashを起動する
  4. ホストのチェックを抑止する(最初にサーバーに接続したときに、全てのjobを並列に接続する場合に、ユーザーにわざわざチェックを求める設定を止める)


 これらのjobを遂行するために常に必要になる要件は、すべて「before_script」以下に記述してください。

 

  デプロイ・展開の設定

  今回サーバーに設定したDockerイメージの関係上、アプリは「build」フォルダに展開しなくてはなりません。
 次のjobを設定します。

======================
stage_deploy:
  artifacts:
   paths:
   - build/
  only:
   - dev
  script:
   - ssh-add <(echo "$STAGING_PRIVATE_KEY")
   - ssh -p22 server_user@server_host "mkdir htdocs/wp-content/themes/_tmp"
   - scp -P22 -r build/* server_user@server_host:htdocs/wp-content/themes/_tmp
   - ssh -p22 server_user@server_host "mv htdocs/wp-content/themes/live htdocs/wp-content/themes/_old && mv htdocs/wp-content/themes/_tmp htdocs/wp-content/themes/live"
   - ssh -p22 server_user@server_host "rm -rf htdocs/wp-content/themes/_old"
======================

 

  この設定の意味は?

  1. only:dev」とは、ビルドが発動するタイミングを、「dev」ブランチにプッシュがあったときたげにするという意味がある。この部分に指定するブランチ名については適宜変更して構わない。この項目を削除してもビルド自体に問題が出るわけではない(ただし、高確率でややこしいことになるので非推奨)。
  2. ssh-add ...」 web UIからockerコンテナに追加したプライベートキーを指定している。
  3. ssh」で接続して、新たに「_tmp」フォルダを作成する
  4. scp」で接続して、(npmスクリプトで生成された)buildフォルダを、前に作成した「_tmp」フォルダにアップロードする
  5. ssh」で接続して、「live」フォルダを「_old」フォルダに移動する。そのあとに「_tmp」フォルダを「live」フォルダに移動する
  6. ssh」で接続して、「_old」フォルダを削除する


 このとき、出来上がったアプリ(artifacts)はどこにあるか気になりますね。
 これはすでにGitLab CIで「build」ディレクトリに移動するように指定してありますから、そこにあるはずです。
 必要とあらば、ダウンロードすることも可能です。

 

 

  なぜこのような方法を取ったか

 実際、ステージサーバーを使うだけなら、次の2行を設定するだけで十分なのです。

======================
- ssh -p22 server_user@server_host "rm -rf htdocs/wp-content/themes/live/*"
- scp -P22 -r build/* server_user@server_host:htdocs/wp-content/themes/live
======================

  上の長いコンフィグは、あくまで設定の意味を説明するために作った見本です。
 

  WordPressの開発がそうであるように、小さなコードの積み重ねが、かなり良いヒントになることがあります。


 今回、例示として作った「.gitlab-ci.yml」は次のようになりました。 

======================
image: tetraweb/php

before_script:
  - apt-get update
 
- apt-get install zip unzip
 
- php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
 
- php composer-setup.php
 
- php -r "unlink('composer-setup.php');"
 
- php composer.phar install
 
- npm install
 
- npm run deploy
 
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
 
- mkdir -p ~/.ssh
 
- eval $(ssh-agent -s)
 
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'

stage_deploy:
  artifacts:
   paths:
   - build/
  only:
   - dev
  script:
   - ssh-add <(echo "$STAGING_PRIVATE_KEY")
  
- ssh -p22 server_user@server_host "mkdir htdocs/wp-content/themes/_tmp"
   - scp -P22 -r build/* server_user@server_host:htdocs/wp-content/themes/_tmp
  
- ssh -p22 server_user@server_host "mv htdocs/wp-content/themes/live htdocs/wp-content/themes/_old && mv htdocs/wp-content/themes/_tmp htdocs/wp-content/themes/live"
   - ssh -p22 server_user@server_host "rm -rf htdocs/wp-content/themes/_old"
======================

 

 

 

 

 2017-11-17 23:47:00 / Hnoss
原文サイトを表示
[ 原文 ] https://docs.gitlab.com/ee/ci/examples/deployment/composer-npm-deploy.html
原文ページプロジェクト並びにドキュメントファイルは、MIT Licenseのもと公開されています。(URL:https://gitlab.com/gitlab-com/gitlab-docs/blob/master/LICENSE) この記事の文章は、訳者の判断によりCreative Commons BY (version 3.0) を適用するものとします。