travisとgit hookでワンタッチ配置


前言


自分のvpsでブログシステムを作ってからもうしばらく経ちましたが、その間もぶつかって多くの問題に遭遇しましたが、今では基礎バージョンが使えます.しかし、vpsに1つのブログを置くのはもったいないし、ブログシステムも文章を書くだけではないので、自然と他の自分で開発したアプリケーションを置くようになりました.ちょうど妻が胎動を数える日になったので、胎動を数える応用をしましたが、配置になると多くの問題に直面しました.もともとブログシステムはvue+loopbackの前後端コーディネートを用い,foreverでアプリケーションをサポートしていた.しかし、新しいアプリケーションはdjango rest frameworkを試みたが、異なるバックエンドアプリケーションサーバの存在は、自然に1つのウェブサーバを導入してリクエスト転送を要求するので、前にnginxを置いた.nginxの配置については別の文章に入れましょう.楽しい過程でもあります.すべては妥当に見えるが、頻繁な調整や配置は当然頭の痛い問題になっている.

導入という大きな問題


私は料理を比較したので、テストモジュールを書いていません.でも私はまだ(yao)追(zhuang)求(bi)があります!!だから私はテストなしで持続的に統合することを堅持します(汚染エラー)!つまり、ワンタッチ配置はフロントエンド部分だけを見ていますが、配置の仕事は何ですか?
ローカル開発完了->git pushからgithub->vps->git pull->build->copyからnginx静的ファイル対応ディレクトリへのログイン
まず、よく使うツールチェーンを通して、できることを先にします.フロントエンド部分としてvueを使用し、構築にwebpackを使用し、パッケージ管理もプロセス制御もnpmなので、第一歩はprod用のwebpack部分に配置ディレクトリを設定しました
webpack.config.js
var PRD_BUILD_PATH = path.resolve(ROOT_PATH, '../../deploy/babyMoveCounter');
....
if (process.env.NODE_ENV === 'production') {
  module.exports.output = {
    path: PRD_BUILD_PATH,
    publicPath: '',
    filename: '[name].js'
  };
}

あと、packageのscript部分にdeployという言葉を付けて準備しておきます
package.json
"scripts": {
    "deploy": "NODE_ENV=production webpack"
}

すると、上の工程が少し減って、今は
ローカル開発完了->git pushからgithub->vps->git pull->npm run deployへのログイン
やっぱりうるさいですね!!!

本格的なキー導入を開始しgit hook


ネット上でワンクリックの配置を見ると、jenkinsの話がたくさんありますが、X用はありません.どうして?ほとんどがjava党がjavaを配備するために使われているからでしょう..まして自分のvpsにjenkinsを置くのは、ちょっと重いようです.そこで絶え間ないgoogleの中で、git hooksという不思議なものを見つけました.git hooksは他のhooksとあまり差がありません.つまり、各段階にフックをつけて他のフックを乾かしましょう.だからpost-receiveというフックを使うことができます.ここまで来ると最初の穴が現れた.参考文献に載っているgit hooksの文章を読んだり、gitの公式サイトに行ったりすると、きっと何が何だか分からない感じがします.しかも操作手順があるように見えますが、どうも間違っています.彼らはgithub pushに何かをすると言っているので、私のアプリケーションは自分のサーバーで、githubとは少しも関係ありません.考えてみると、ここでは配置工程を調整しながら、Nステップを増やす必要があります.のまた用事が多くなる===
ローカル開発完了->git pushからgithubローカル開発完了->git pushからvps上のプライベートウェアハウス->vpsにログイン->cdからvps上のコードディレクトリ(プライベートウェアハウスディレクトリではない)->git pull->npm run deploy
そう、私有倉庫を建てるとpost-receiveが役に立つので、どのように私有倉庫を建てるかは便利ですgoogleちょっと良いかもしれませんが、gitユーザーの権限に関する問題は自分のvpsで、私はルートディレクトリの下に3つのフォルダを設置しました.
/opt/git/#すべてのプライベートウェアハウス/projects/#サーバ上のpullを置くためのコード/deploy/#buildの後のコードを置くために使用されますが、なぜprojectsと分離するのですか?nginxに聞いてみろよ!
次に、post-receive post-receiveのコードを追加して/opt/git/xxxxprojectに置くことができます.git/hooksの私のコードはこうです
#!/bin/sh

LOGFILE=./post-receive.log
# The deployed directory (the running site)
DEPLOYDIR=/projects/babyMoveCounter

##  Record the fact that the push has been received
echo -e "Received Push Request at $( date +%F )" >> $LOGFILE
echo " - Old SHA: $oldrev New SHA: $newrev Branch Name: $refname" >> $LOGFILE

## Update the deployed copy
echo "Starting Deploy" >> $LOGFILE

echo " - Starting code update"
GIT_WORK_TREE="$DEPLOYDIR" git checkout -f
echo " - Finished code update"

echo " - Starting npm install"
cd "$DEPLOYDIR"; npm install;
echo " - Finished npm install"

echo " - Staring build"
cd "$DEPLOYDIR"; npm run deploy;
echo " - Finished build"

echo "Finished Deploy" >> $LOGFILE

最も重要なのは主に3ステップで、コードを引いて、npm install、npm run deployそこで、私達の配置の流れは大いに簡略化して、今2キーの配置です
ローカル開発完了->git pushからgithubローカル開発完了->git pushからvps上のプライベートウェアハウスへ
ワンクリックの導入に近づいてきましたが、2点が好きなら見ないでください.

ワンタッチでtravis-ciを導入


実は上の部分をやり遂げて、ソースを開きたくないならば、ワンタッチの配置もすでに達成しました.しかし、一般的に自分のプロジェクトはオープンソースでgithubに置かれているので、分けて楽しむためにgithubに置かれている以上、travis-ciは優れたツールとしてプロセスに導入されるとともに、2つの倉庫をリンクする橋渡しとしてtravis-ciに導入されると、導入プロセスはこうなります
ローカル開発完了->git pushからgithub->通知travis-ci->ランニングテスト->git pushからvps上のプライベートウェアハウス

統合travis-ci


参考ドキュメントのhexo作者のブログにははっきり書いてありますが、まだ霧の中にいるような気がします.なぜですか.それともそのせいかgithubに置いたのですioが上がったんだよ!!私はvpsに統合します!!続けましょう..まず、travis政府がgit統合(注意、github以外)のサンプルコードをどのように使用するかについて説明します.
after_success:
  - eval "$(ssh-agent -s)" #start the ssh agent
  - chmod 600 .travis/deploy_key.pem # this key should have push access
  - ssh-add .travis/deploy_key.pem
  - git remote add deploy DEPLOY_REPO_URI_GOES_HERE
  - git push deploy

そこから私たちは
  • これまた一つのhook
  • この品物は私たちのssh
  • に代わることができます.
    ここまで来て、前のブログを振り返ってみると、githubからtravis、私たちのプライベート倉庫までのビジネスプロセスはこのようなものだと推測できます.
    git pushからgithubへ->通知travis-ci->ランニングテスト->テストランニング成功->travisオープンssh->git pushからvps上のプライベートウェアハウスへ
    そのため、travisに配備用のrsa鍵を与える必要があります.まず、鍵を生成します.
    $ ssh-keygen -t rsa -C "[email protected]" #  hexo        ,    ,      

    生成されたファイルはtravisと呼ばれていますdeploy & travis_deploy.pub(gitignoreに入れたのを覚えています)travis agentにsshでコードをアップロードさせたのでtravis_deploy暗号化をtravisに転送し、travis_をdeploy.pubは私たちのプライベート倉庫に置く前のブログにgithubのプロジェクトにdeployのkeyを置いて、原理は実は同じです.彼のafter successはgithubの上で実行しているので、私は自分のvpsで実行しています.
    一歩一歩

    まず基本的なことを書きます。travis.yml

    language: node_js
    node_js:
    - '4'
    script:
    - npm run test
    branches:
      only:
      - master

    暗号化travis_deploy

    $ gem install travis #    ruby gem
    $ travis login --auto
    $ travis encrypt-file travis_deploy --add

    その後travisは自動的にプロジェクトを変更します.travis.yml

    .travis.yml最終構成

    language: node_js
    node_js:
    - '4'
    script:
    - npm run test
    branches:
      only:
      - master
    before_install:
    - openssl aes-256-cbc -K $encrypted_cb1b65bfda52_key -iv $encrypted_cb1b65bfda52_iv
      -in travis_deploy.enc -out travis_deploy -d
    - chmod 600 travis_deploy
    - cp travis_deploy ~/.ssh/travis_deploy
    - cp travis_config ~/.ssh/config
    
    after_success:
    - eval "$(ssh-agent -s)"
    - ssh-add ~/.ssh/travis_deploy
    - git remote add deploy [email protected]:/opt/git/yourPrivateRepo.git
    - git push deploy

    travis_deploy.pub

    # sftp   vps ,   server   
    cat travis_deploy.pub >> /home/git/.ssh/authorized_keys

    ssh config


    ここまで来ると、travisはgit pushができますが、自分のvpsはtravis agentの認証サーバーではありませんので、ssh configを少し増やす必要があります.そうしないと、Are you sure you want to continue connecting(yes/no)が現れますか?
    Host xx.xx.xx.xx
      User git
      StrictHostKeyChecking no
      IdentityFile ~/.ssh/travis_deploy
      IdentitiesOnly yes

    これで,すべての大功が成し遂げられた.デルの導入プロセスは
    ローカル開発完了->git pushからgithub
    いいhigh~いいhigh~

    いくつかの過程の穴を補充します


    npm共有問題


    一般的にvpsにnodeをインストールするのはnvmで制御されますがgitユーザー用のnpmもnvmでインストールすることはできませんので、root用の現在のバージョンのnodeを他のユーザーに同期させる命令を走る必要があります.
    n=$(which node);n=${n%/bin/node}; chmod -R 755 $n/bin/*; sudo cp -r $n/{bin,lib,share}/usr/local
    nodeバージョンを切り替えるたびにgitユーザーも交換する必要がある場合は、もう一度実行する必要があります.

    まとめ


    何の総括もなくて、1つのボタンの配置、良いhigh~~~

    リファレンスドキュメント


    travis & git

  • https://zespia.tw/blog/2015/01/21/continuous-deployment-to-github-with-travis/
  • http://davidsiaw.github.io/blog/2014/10/30/using-travis-to-deploy-my-blog/
  • https://docs.travis-ci.com/user/deployment/custom/

  • git post-receive hook

  • https://www.sitepoint.com/one-click-app-deployment-server-side-git-hooks/

  • travis unauthed host issue

  • http://stackoverflow.com/questions/16638573/auto-authorize-ssh-auth-requests-on-travis-ci

  • install nvm & share node to other user

  • https://www.digitalocean.com/community/tutorials/how-to-install-node-js-with-nvm-node-version-manager-on-a-vps