亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

用travis和git hook搞個(gè)一鍵部署

archieyang / 2354人閱讀

摘要:一切看似妥當(dāng),但是頻繁的調(diào)整以及部署自然成了頭疼的問題。叫作部署的大問題由于我比較菜,所以沒有寫測(cè)試模塊。為什么因?yàn)榻^大多數(shù)都是黨用來(lái)部署的啊。。。經(jīng)過思考,原來(lái)在這里我們需要將部署工序做一個(gè)調(diào)整,同時(shí)增加步。。。

前言

在自己的vps上做博客系統(tǒng)已經(jīng)有一段時(shí)間了,期間也是磕磕碰碰遇到不少問題,如今也算是有個(gè)基礎(chǔ)版本能用??墒莢ps上只放一個(gè)博客有點(diǎn)浪費(fèi)了,而且博客系統(tǒng)也不光是用來(lái)寫文章的,所以自然就開始放一些其他的自己開發(fā)的應(yīng)用。
正好老婆到了要數(shù)胎動(dòng)的日子了,于是就做了一個(gè)數(shù)胎動(dòng)的應(yīng)用,可是到部署的時(shí)候卻遇到了不少問題。
原本博客系統(tǒng)用的是vue+loopback的前后端搭配,用forever支撐應(yīng)用。但是新應(yīng)用嘗試了一下django rest framework,不同的后端應(yīng)用服務(wù)器的存在,自然地要求引入一個(gè)web服務(wù)器做請(qǐng)求轉(zhuǎn)發(fā),所以就在前面放了一個(gè)nginx。關(guān)于nginx的配置就放到另一篇文章里吧,也是一個(gè)愉(keng)悅(die)的過程。
一切看似妥當(dāng),但是頻繁的調(diào)整以及部署自然成了頭疼的問題。

叫作部署的大問題

由于我比較菜,所以沒有寫測(cè)試模塊。但是我還是有(yao)追(zhuang)求(bi)?。?!所以我堅(jiān)持要做沒有測(cè)試持續(xù)集成(誤)!換言之,一鍵部署
我們只看前端部分,那部署要做的工作是什么呢?

本地開發(fā)完成 -> git push到github -> 登錄到vps -> git pull -> build -> copy到nginx靜態(tài)文件對(duì)應(yīng)目錄

首先,通過常用的工具鏈,把能做的事情先做掉點(diǎn)。由于我用的是vue作為前端部分,構(gòu)建用了webpack,包管理和流程控制都是npm,所以第一步,在prod用的webpack部分設(shè)定了一下部署目錄

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的這句,就算準(zhǔn)備好了

package.json
"scripts": {
    "deploy": "NODE_ENV=production webpack"
}

于是,上面的這個(gè)工序就減少了一點(diǎn),現(xiàn)在變成了

本地開發(fā)完成 -> git push到github -> 登錄到vps -> git pull -> npm run deploy

還是很煩?。。?!

開始正式搞一鍵部署,引入git hook

網(wǎng)上看一鍵部署有好多文章,然后會(huì)發(fā)現(xiàn)很多都是講jenkins的,但是并沒有什么X用。為什么?因?yàn)榻^大多數(shù)都是java黨用來(lái)部署java的啊。。。
況且在自己的vps上放個(gè)jenkins,貌似有點(diǎn)太笨重了。于是在不斷的google中,找到了git hooks這個(gè)神奇的東西。
git hooks和其他hooks差不多,也就是在各個(gè)階段加個(gè)鉤子干點(diǎn)別的唄,所以我們就可以用到post-receive這個(gè)鉤子。
到這里就出現(xiàn)了第一個(gè)坑。如果有人去看參考文檔里講git hooks的文章,或者去git官網(wǎng)看,一定會(huì)有不明覺厲的感覺。而且是看似有操作步驟,但是總感覺不太對(duì)。
因?yàn)樗麄冋f的都是往github push的時(shí)候干點(diǎn)啥,可是我的應(yīng)用是在自己的服務(wù)器上,跟github沒半毛錢關(guān)系。。
經(jīng)過思考,原來(lái)在這里我們需要將部署工序做一個(gè)調(diào)整,同時(shí)增加N步。。。又要多事情了= =

本地開發(fā)完成 -> git push到github
本地開發(fā)完成 -> git push到vps上私有倉(cāng)庫(kù) -> 登錄到vps -> cd到vps上的代碼目錄(并不是私有倉(cāng)庫(kù)目錄) -> git pull -> npm run deploy

沒錯(cuò),建一個(gè)私有倉(cāng)庫(kù),那么post-receive就可以有用武之地了,怎么建私有倉(cāng)庫(kù)就很方便的google一下好了
可能遇到的問題是關(guān)于git用戶的權(quán)限問題
在我自己的vps上,我在根目錄下設(shè)了3個(gè)文件夾

/opt/git/ # 用來(lái)放所有的私有倉(cāng)庫(kù)
/projects/ # 用來(lái)放服務(wù)器上pull的代碼
/deploy/ # 用來(lái)放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

最關(guān)鍵的主要是3步,拉代碼,npm install,npm run deploy
于是乎,我們的部署流程就大大的簡(jiǎn)化了,現(xiàn)在是2鍵部署

本地開發(fā)完成 -> git push到github
本地開發(fā)完成 -> git push到vps上私有倉(cāng)庫(kù)

離一鍵部署越來(lái)越近了,如果你喜歡2一點(diǎn),那就不要看下去了

一鍵部署達(dá)成,引入travis-ci

其實(shí)做到上面這部,如果不想開源的話,一鍵部署也已經(jīng)達(dá)成了。但是,一般自己項(xiàng)目都是開源放到github的,為了分(炫)享(技)嘛
既然放到了github,那么travis-ci作為一個(gè)優(yōu)秀的工具就可以被引入到流程中,同時(shí),它也能作為鏈接2個(gè)倉(cāng)庫(kù)的橋梁
引入travis-ci后,部署流程就會(huì)是這樣的

本地開發(fā)完成 -> git push到github -> 通知travis-ci -> 跑測(cè)試 -> git push到vps上私有倉(cāng)庫(kù)

集成travis-ci

參考文檔中hexo作者的博客里已經(jīng)寫的挺清楚了,但是仍然會(huì)讓我覺得云里霧里,為什么呢?還是那個(gè)原因,他們是放到github.io上去的?。?!我要集成到我的vps呀!!
讓我們繼續(xù)。。。
首先,我們了解一下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

從中我們發(fā)現(xiàn)

這又是一個(gè)hook

這貨能替我們ssh

到這一步,再回想一下之前的博客,我們可以推斷出,github到travis再到我們私有倉(cāng)庫(kù)的業(yè)務(wù)流程應(yīng)該是這樣的

git push到github -> 通知travis-ci -> 跑測(cè)試 -> 測(cè)試跑成功 -> travis開啟ssh -> git push到vps上私有倉(cāng)庫(kù)

所以我們需要給travis一個(gè)部署用的rsa密鑰才行。所以就有了以下這幾步(這些命令都在項(xiàng)目根目錄中執(zhí)行)
首先,我們生成一個(gè)密鑰

$ ssh-keygen -t rsa -C "your_email@example.com" #就像hexo作者的博客里說的,別加密碼,除非你想自虐

生成的文件我們叫它們travis_deploy & travis_deploy.pub (記得在gitignore里面把它們加進(jìn)去)
由于我們是讓travis agent通過ssh上傳代碼,所以我們把travis_deploy加密傳到travis上,然后,把travis_deploy.pub放到我們的私有倉(cāng)庫(kù)里
之前的博客中是在github的項(xiàng)目里放一個(gè)deploy的key,原理其實(shí)是一樣的,因?yàn)樗腶fter success是在github上面執(zhí)行,而我是在自己的vps上執(zhí)行

讓我們一步步來(lái)

先寫一個(gè)基本的.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會(huì)自動(dòng)修改項(xiàng)目中的.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 git@xx.xx.xx.xx:/opt/git/yourPrivateRepo.git
- git push deploy
travis_deploy.pub
# sftp上傳到vps上,然后在server上執(zhí)行
cat travis_deploy.pub >> /home/git/.ssh/authorized_keys
ssh config

到這一步,travis是能夠做git push了,但是自己的vps并不是travis agent的認(rèn)證服務(wù)器,所以我們需要增加一點(diǎn)ssh config,不然會(huì)出現(xiàn)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

到此,一切大功告成!我們的部署流程變成了

本地開發(fā)完成 -> git push到github

好high~ 好high~

補(bǔ)充一些過程中的坑 npm共享問題

一般在vps上安裝node都是用nvm來(lái)控制的,但是給git用戶用的npm總不能也用nvm來(lái)裝,所以需要跑一些指令讓root用的當(dāng)前版本的node,同步給其他用戶

n=$(which node);n=${n%/bin/node}; chmod -R 755 $n/bin/*; sudo cp -r $n/{bin,lib,share} /usr/local

每次切換node版本如果git用戶也需要換的話,必須再執(zhí)行一次

總結(jié)

沒啥總結(jié)的,一鍵部署,好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

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/79770.html

相關(guān)文章

  • 如何在服務(wù)器上搭建hexo博客

    原文鏈接 隨著Vateral主題的開發(fā)接近了尾聲,在對(duì)主題速度優(yōu)化的時(shí)候發(fā)現(xiàn)之前用的githubpage問題多多:首先就是因?yàn)樵趪?guó)內(nèi)的原因,訪問速度本身就很慢,曾經(jīng)有次加載一張16kb的圖標(biāo)時(shí)間耗費(fèi)了26s?。??其次,在對(duì)資源做CDN托管加速時(shí),域名是需要備案的,顯然githubpage也是做不了的;所以果斷舍棄了這個(gè)把hexo搭建到了我的阿里云服務(wù)器上 總體來(lái)說還是比把hexo搭建到github...

    MycLambert 評(píng)論0 收藏0
  • 基于 Rancher 的企業(yè) CI/CD 環(huán)境搭建

    摘要:持續(xù)集成,持續(xù)交付當(dāng)然也有叫通常會(huì)采用一些軟件如等來(lái)輔助我們。這時(shí)可以通過倉(cāng)庫(kù)自帶的來(lái)觸發(fā)。這里的最好是可以支持,關(guān)于,大家可以理解為類似的功能。關(guān)于如何取出服務(wù)地址并自動(dòng)添加記錄的原理,可以參考我之前的一篇文章文中第三部分有詳細(xì)描述。 CI(Continuous Integration)持續(xù)集成,CD(Continuous Delivery) 持續(xù)交付(當(dāng)然也有叫 Continuou...

    starsfun 評(píng)論0 收藏0
  • Travis CI + github + hexo 自動(dòng)化部署

    摘要:是目前新興的開源持續(xù)集成構(gòu)建項(xiàng)目,采用格式,簡(jiǎn)潔清新獨(dú)樹一幟。目前大多數(shù)的項(xiàng)目都已經(jīng)移入到的構(gòu)建隊(duì)列中。測(cè)試提交代碼到中查看部署情況至此,整個(gè)部署完成,趕快自己嘗試一下吧 Travis CI是目前新興的開源持續(xù)集成構(gòu)建項(xiàng)目,采用yaml格式,簡(jiǎn)潔清新獨(dú)樹一幟。目前大多數(shù)的github項(xiàng)目都已經(jīng)移入到Travis CI的構(gòu)建隊(duì)列中。Travis-CI會(huì)同步你在GitHub上托管的項(xiàng)目,...

    iliyaku 評(píng)論0 收藏0
  • 阿里云VPS搭建自己的的Hexo博客

    摘要:博客的架構(gòu)先搞明白博客從搭建到自動(dòng)發(fā)布的架構(gòu),才能更好的理解我們每一步進(jìn)行的操作。整個(gè)搭建流程第一部分服務(wù)器環(huán)境搭建,包括安裝配置創(chuàng)建用戶。在裸庫(kù)的文件夾中,新建文件。 1. 博客的架構(gòu) 先搞明白Hexo博客從搭建到自動(dòng)發(fā)布的架構(gòu),才能更好的理解我們每一步進(jìn)行的操作。不然只跟著步驟過了一遍,卻不知道為什么這么做。 首先看這張架構(gòu)圖:showImg(https://segmentfaul...

    hizengzeng 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<