持續(xù)集成拧咳、持續(xù)部署伯顶、持續(xù)交付、持續(xù)發(fā)布

概念

持續(xù) (Continuous):不斷的獲取反饋骆膝,響應(yīng)反饋祭衩。
集成 (Integration):編譯、測(cè)試阅签、打包掐暮;
部署 (Deployment):應(yīng)用組件或基本設(shè)施的代碼或配置變更在產(chǎn)品環(huán)境生效稱為“部署”;
發(fā)布 (Release):具有業(yè)務(wù)影響的功能變化對(duì)最終用戶可見(jiàn)稱為“發(fā)布”政钟。
交付 (Delivery):可以理解為從 Deployment 到 Release之間的階段路克,更多的強(qiáng)調(diào)的是一種能力。開(kāi)發(fā)有能力頻繁的部署养交,業(yè)務(wù)有能力隨時(shí)發(fā)布精算。

相關(guān)連接:
知乎:如何理解持續(xù)集成、持續(xù)交付碎连、持續(xù)部署灰羽?
阮一峰:持續(xù)集成是什么?
使用Jenkins進(jìn)行持續(xù)集成
coding.net:ci
使用 Jenkins 構(gòu)建 Coding 項(xiàng)目

達(dá)到的目標(biāo)

名詞說(shuō)的那么多鱼辙,扯的天花亂墜也沒(méi)什么卵用廉嚼,達(dá)到實(shí)際的效果才行。

我要達(dá)到的目的:開(kāi)發(fā)人員提交代碼到git倒戏,剩下的事情軟件自動(dòng)完成怠噪,打開(kāi)瀏覽器可以直接看到程序界面

開(kāi)始搭建持續(xù)集成環(huán)境

這里講兩種,1.Java語(yǔ)言杜跷,Springboot框架為主開(kāi)發(fā)時(shí)Jenkins持續(xù)集成傍念,2.Js或Ts語(yǔ)言,以angualr框架或nodejs等為主開(kāi)發(fā)葱椭,Jenkins集成捂寿。
當(dāng)然持續(xù)集成軟件有很多,比如git-ci等等孵运,這里選Jenkins因?yàn)槿娑曳奖恪?/strong>

第一種:記錄使用Jenkins,Git私庫(kù)進(jìn)行持續(xù)集成一個(gè)Java語(yǔ)言項(xiàng)目

環(huán)境

Java版本:jdk8
框架:springboot
操作系統(tǒng): centos
協(xié)同開(kāi)發(fā):Git (私庫(kù))

關(guān)于環(huán)境題外話

版本控制現(xiàn)在用的比較多的就是svn和git秦陋。
推薦git,使用一次就再也不想用svn了治笨。
免費(fèi)好用的廠商提供的協(xié)同工具:

githubhttps://github.com/ 毋庸置疑驳概,老牌王牌赤嚼,缺點(diǎn)是國(guó)內(nèi)網(wǎng)速不好,且私有項(xiàng)目收費(fèi)顺又,聽(tīng)說(shuō)最近被微軟收購(gòu)了更卒,不知道會(huì)不會(huì)有大的改動(dòng)。

碼云https://gitee.com/ 開(kāi)源中國(guó)git版稚照,國(guó)內(nèi)速度快蹂空,缺點(diǎn)是私有項(xiàng)目只能有5個(gè)人,超過(guò)收費(fèi)果录。

codinghttps://coding.net/ 服務(wù)器在香港上枕,國(guó)內(nèi)外訪問(wèn)速度都挺好,私有項(xiàng)目可以達(dá)到20人弱恒,目前還是比較不錯(cuò)的選擇辨萍。小公司可以選擇這個(gè),基本不花錢(qián)返弹。

自建git锈玉,很多公司為了代碼安全,都是找臺(tái)服務(wù)器自建git服務(wù)义起。大公司或者純粹為了安全拉背,推薦這種。

安裝持續(xù)部署環(huán)境 Jenkins

創(chuàng)建新用戶

好習(xí)慣是給每一個(gè)特殊的服務(wù)提供一個(gè)新的linux用戶并扇,當(dāng)然你可以選擇root

-- 添加用戶
adduser  ci
-- 修改密碼 
passwd ci 
-- 輸入密碼ci
--切換到ci默認(rèn)目錄
cd /home/ci

安裝jdk

有時(shí)候一天linux服務(wù)器可能跑多個(gè)版本的jdk去团,你可能會(huì)遇到抡诞,解決辦法有兩種穷蛹,第一,安裝最高版本的jdk昼汗,第二肴熏,安裝多個(gè)版本的jdk∏曛希考慮到你可能會(huì)遇到問(wèn)題蛙吏,這里記錄單系統(tǒng)裝多個(gè)版本jdk。
Linux 卸載JDK并安裝新版本JDK (rpm,tar)
ubuntu或者linux下卸載和安裝多個(gè)jdk版本鞋吉,1.6鸦做,1.7和1.8版本
oracle官網(wǎng)下載JDK地址

安裝jenkins

首先,我們從Jenkins官方網(wǎng)站https://jenkins.io/下載最新的war包谓着。雖然Jenkins提供了Windows泼诱、Linux、OS X等各種安裝程序赊锚,但是治筒,這些安裝程序都沒(méi)有war包好使屉栓。我從未見(jiàn)過(guò)Jenkins這樣把Java包做得如此簡(jiǎn)單的項(xiàng)目。只需要運(yùn)行命令:

java -jar jenkins.war

Jenkins就啟動(dòng)成功了耸袜!它的war包自帶Jetty服務(wù)器友多,剩下的工作我們?nèi)吭跒g覽器中進(jìn)行。
假如你想讓該程序后臺(tái)運(yùn)行

-- 設(shè)置為后臺(tái)運(yùn)行并修改端口
nohup java -jar jenkins.war --httpPort=8888 &

安裝過(guò)程

第一次啟動(dòng)Jenkins時(shí)堤框,出于安全考慮域滥,Jenkins會(huì)自動(dòng)生成一個(gè)隨機(jī)的按照口令。注意控制臺(tái)輸出的口令蜈抓,復(fù)制下來(lái)骗绕,然后在瀏覽器輸入:
http://IP地址:端口/
比如: http://localhost:8080/

運(yùn)行成功后,打開(kāi)瀏覽器资昧,一般要粘貼口令酬土,安裝插件,如果你第一次安裝不是懂的很多,這里選擇默認(rèn)的推薦安裝插件即可格带,安裝完成后可以在設(shè)置中增刪插件撤缴,登陸后創(chuàng)建用戶,一般是admin超級(jí)管理員即可叽唱,這里也是登陸成功后可以進(jìn)行用戶管理屈呕,不喜歡的后邊隨時(shí)可以改。然后點(diǎn)擊下一步下一步棺亭,基本就完成了安裝虎眨。
安裝成功后可以大體瀏覽下界面。

配置Springboot項(xiàng)目持續(xù)化集成

配置Maven插件


然后镶摘,在Jenkins首頁(yè)選擇“新建”嗽桩,輸入名字,選擇“構(gòu)建一個(gè)maven項(xiàng)目”:

new-job

在配置頁(yè)中凄敢,源碼管理選擇Git碌冶,填入地址:

git-config

私鑰配置

復(fù)制你私鑰的文本粘貼在此即可陌宿。
私鑰生成代碼:

一 椒拗、

設(shè)置Git的user name和email:

$ git config --global user.name "xuhaiyan"
$ git config --global user.email "haiyan.xu.vip@gmail.com"


二、生成SSH密鑰過(guò)程:
1.查看是否已經(jīng)有了ssh密鑰:cd ~/.ssh
如果沒(méi)有密鑰則不會(huì)有此文件夾读整,有則備份刪除
2.生存密鑰:
$ ssh-keygen -t rsa -C “haiyan.xu.vip@gmail.com”
按3個(gè)回車拒逮,密碼為空罐氨。


Your identification has been saved in /home/tekkub/.ssh/id_rsa.
Your public key has been saved in /home/tekkub/.ssh/id_rsa.pub.
The key fingerprint is:
………………



最后得到了兩個(gè)文件:id_rsa和id_rsa.pub



默認(rèn)使用master分支。如果需要口令滩援,在Credentials中添加用戶名/口令栅隐,或者使用SSH Key。

構(gòu)建觸發(fā)器指定了觸發(fā)一次構(gòu)建的條件。推薦使用最簡(jiǎn)單的配置“Poll SCM”约啊,它的意思是邑遏,定時(shí)檢查版本庫(kù),發(fā)現(xiàn)有新的提交就觸發(fā)構(gòu)建恰矩。這種方式對(duì)git记盒、SVN等所有版本管理系統(tǒng)都是通用的。

我們?cè)谌粘瘫碇刑钊耄?/p>

* * * * *

trigger

表示每分鐘檢查一次外傅。如果你覺(jué)得太頻繁纪吮,可以改成“每3分鐘檢查一次”:

*/3 * * * *

在“Build”中,默認(rèn)的Root POM是pom.xml萎胰。如果pom.xml不在根目錄下碾盟,就填入子目錄,例如:wxapi/pom.xml技竟。

在Goals and options中冰肴,填入需要執(zhí)行的mvn命令:clean package,Jenkins將執(zhí)行如下命令榔组,或者不填

mvn clean package
特殊參數(shù)也在這里填寫(xiě)熙尉,如`-DskipTests=true clean package`。

保存后搓扯,就可以執(zhí)行自動(dòng)化構(gòu)建了检痰。

點(diǎn)擊一個(gè)構(gòu)建任務(wù),可以在Console Output中看到控制臺(tái)詳細(xì)輸出锨推,便于出錯(cuò)排查:

console-output

如何部署

如果要部署構(gòu)建好的war包铅歼,可以在Post Steps中填上shell命令,直接用腳本部署换可。

另一種方式是創(chuàng)建另外一個(gè)構(gòu)建項(xiàng)目椎椰,手動(dòng)觸發(fā)部署。

無(wú)論用哪種方式锦担,都是為了確保編譯俭识、部署是通過(guò)CI服務(wù)器完成的慨削,而不是某臺(tái)開(kāi)發(fā)機(jī)器洞渔。
由于Springboot項(xiàng)目打包為jar,運(yùn)行非常方便缚态,這里就使用jar包發(fā)布磁椒。為了方便,我寫(xiě)了幾段腳本玫芦,腳本如下:

shell方式

--啟動(dòng)腳本start.sh
#!/bin/bash
nohup java -jar ../../apidoc-1.0.0.jar &


--停止腳本stop.sh
#!/bin/bash
PID=$(ps -ef | grep apidoc-1.0.0.jar | grep -v grep | awk '{ print $2 }')
if [ -z "$PID" ]
then
    echo Application is already stopped
else
    echo kill $PID
    kill $PID
fi


--run.sh集成啟動(dòng)和停止的sh
#!/bin/bash
echo "停止應(yīng)用"
source ./stop.sh
echo "啟動(dòng)應(yīng)用"
source ./start.sh


--為jennkins專門(mén)使用浆熔,主要原因是他必須使用絕對(duì)路徑,run4jenkins 為jenkins的run.sh
#!/bin/bash
cd /home/ci/.jenkins/workspace/apidoc/target/classes/shell 這里是你的項(xiàng)目的絕對(duì)路徑
echo "停止應(yīng)用"
source ./stop.sh
echo "啟動(dòng)應(yīng)用"
source ./start.sh


-- 注意防止殺死進(jìn)程 and 必須用絕對(duì)路徑
BUILD_ID=DONTKILLME
sh /home/ci/.jenkins/workspace/apidoc/target/classes/shell/run4jenkins.sh 

幾個(gè)注意點(diǎn)

jenkins運(yùn)行shell腳本必須使用絕對(duì)路徑桥帆,這個(gè)跟linux是一致的医增,如果你想用相對(duì)路徑慎皱,可以先cd切換到目錄下在運(yùn)行shell腳本。

jenkins啟動(dòng)的進(jìn)程會(huì)被默認(rèn)殺死叶骨,防止進(jìn)程被殺死可以加這個(gè)參數(shù)BUILD_ID=DONTKILLME
我第一構(gòu)建項(xiàng)目的時(shí)候茫多,由于項(xiàng)目為Maven多模塊,Jenkins不熟悉忽刽,構(gòu)建了36次才成功天揖,哈哈,所以你別急跪帝。編程開(kāi)發(fā)今膊,踩坑太正常了。
jenkins默認(rèn)工作路徑為/home/user/.jenkins伞剑,做遷移時(shí)斑唬,拷貝這個(gè)目錄即可。
記錄一個(gè)問(wèn)題黎泣,我這里使用阿里云服務(wù)器赖钞,默認(rèn)home文件夾為20G磁盤(pán)大小,后來(lái)磁盤(pán)滿了聘裁,做了一次遷移雪营。被耽誤好多時(shí)間。
修改Jenkins默認(rèn)工作路徑:

vim /etc/profile
-- 增加 JENKINS_HOME 即可
JENKINS_HOME=/local/jenkins
export JENKINS_HOME

如何創(chuàng)建Linux服務(wù)

有了Jenkins衡便,我們就可以在內(nèi)網(wǎng)或者租用一臺(tái)EC2服務(wù)器來(lái)搭建CI環(huán)境献起,每月費(fèi)用不到¥100。推薦Ubuntu Linux系統(tǒng)镣陕。因?yàn)槲覀儾幌朊看蔚卿浀絃inux去啟動(dòng)Jenkins谴餐,也不想寫(xiě)腳本來(lái)啟動(dòng)服務(wù)。推薦安裝JDK后呆抑,配合supervisor岂嗓,把Jenkins直接變成一個(gè)服務(wù)。

可以在Linux上創(chuàng)建一個(gè)ci用戶鹊碍,然后厌殉,用supervisor啟動(dòng)并指定9001端口:

# /etc/supervisor/conf.d/ci.conf

[program:ci]
command=java -jar /home/ci/jenkins.war --httpPort=9001
user=ci
autostart=true
autorestart=true
startsecs=30
startretries=5

Jenkins默認(rèn)在當(dāng)前用戶的主目錄下創(chuàng)建.jenkins目錄,所有的配置文件侈咕、數(shù)據(jù)庫(kù)都存放在里面公罕,只需要備份這個(gè)目錄就備份了整個(gè)CI配置。

這樣耀销,一個(gè)CI環(huán)境就搭建完畢楼眷。

構(gòu)建Angular等前端開(kāi)發(fā)項(xiàng)目的持續(xù)集成

安裝angular運(yùn)行環(huán)境

這里可以使用docker,一個(gè)命令就可以啟動(dòng)一個(gè)運(yùn)行環(huán)境,推薦使用罐柳。
我這臺(tái)服務(wù)器有其他用途掌腰,所以我安裝angular開(kāi)發(fā)環(huán)境。

安裝nodejs

centos6.5安裝nodejs有些坑张吉,我踩過(guò)了你就不要踩了辅斟。
1.yum源安裝,nodejs沒(méi)用最新版,angualr無(wú)非運(yùn)行
2.官方推薦下載源代碼芦拿,自動(dòng)編譯安裝士飒,但是centos6.5的c++變壓器版本過(guò)老,無(wú)法編譯最新版nodejs源碼蔗崎,需要替換c++編輯器酵幕,想想替換過(guò)程就操蛋。干脆放棄缓苛。
3.下載官方編譯好的安裝包芳撒。配置環(huán)境變量,我采用的這種

下載最新版 https://nodejs.org/en/download/

cd /local/src
mkdir nodejs
cd nodejs
wget https://nodejs.org/dist/v8.11.2/node-v8.11.2-linux-x64.tar.xz
-- 解壓
xz -d ***.tar.xz
tar -xvf  ***.tar

--配置環(huán)境變量
vim /etc/profile
--增加如下
# nodejs
export NODE_HOME=/local/nodejs/node-v8.11.2-linux-x64
export PATH=$NODE_HOME/bin:$PATH
保存退出未桥,刷新生效
source /etc/profile

--測(cè)試
node -v 
npm -v
輸出版本信息笔刹,即安裝成功

做一些優(yōu)化配置

npm太慢, 淘寶npm鏡像使用方法

淘寶 npm 地址: http://npm.taobao.org/

如何使用 有很多方法來(lái)配置npm的registry地址冬耿,下面根據(jù)不同情境列出幾種比較常用的方法舌菜。以淘寶npm鏡像舉例:

1.臨時(shí)使用

npm --registry https://registry.npm.taobao.org install express

2.持久使用

npm config set registry https://registry.npm.taobao.org

  • 配置后可通過(guò)下面方式來(lái)驗(yàn)證是否成功 npm config get registrynpm info express

3.通過(guò)cnpm使用

npm install -g cnpm --registry=https://registry.npm.taobao.org

  • 使用 cnpm install express

安裝anglular-cli

anglular-cli是angular的開(kāi)發(fā)手腳架,使用cli開(kāi)發(fā)angular程序非常方便亦镶,不得不說(shuō)google的工程師真的是非常牛日月!

升級(jí)安裝npm
npm install npm -g
查看npm版本
npm -v
安裝TypeScript
npm install -g typescript
查看TypeScript版本
tsc -v
安裝 angular-cli
npm install -g @angular/cli
查看angular-cli 版本
ng -v

看到如下信息表示成功


備注:

圖省事的話,其實(shí)就安裝nodejs和angular-cli即可
到此缤骨,angular運(yùn)行環(huán)境搭建完成爱咬。

配置Jenkins持續(xù)集成任務(wù)

新建一個(gè) ‘自由風(fēng)格的任務(wù)’



配置git


配置nodejs插件



配置觸發(fā)器和定時(shí)掃描,這里是每分鐘檢測(cè)git一次绊起,隨你改



保存精拟,然后構(gòu)建任務(wù)

等待輸出成功,查看日志打印如下


然后登陸linux虱歪,進(jìn)入jenkins的工作目錄蜂绎,類似這里
/local/jenkins/workspace/cloud_front
執(zhí)行項(xiàng)目初始化,這里跟angular開(kāi)發(fā)操作無(wú)異,不展開(kāi)細(xì)講

npm install
然后運(yùn)行項(xiàng)目
ng server

編譯成功后实蔽,訪問(wèn)http:ip:4200 查看沒(méi)什么錯(cuò)誤荡碾,就可以知道構(gòu)建腳本怎么寫(xiě)了
如果安裝失敗,請(qǐng)刪除node_modules局装,重寫(xiě)npm install

rm -rf node_modules/

-- 如果你使用了scss而不是css,安裝scss編譯環(huán)境可能會(huì)出錯(cuò)
請(qǐng)嘗試如下操作
-- 安裝node編譯c++擴(kuò)展的工具dode-gyp
npm install -g node-gyp
-- 安裝時(shí)嘗試跳過(guò)錯(cuò)誤
npm install  --unsafe-perm
--測(cè)試是否成功,可以單獨(dú)安裝node-scss
刪除
npm uninstall node-sass
重新安裝
npm install node-sass
-- node-sass安裝失敗铐尚,多少是網(wǎng)絡(luò)原因拨脉,國(guó)內(nèi)被墻了
首先要知道的是,安裝 node-sass 時(shí)在 node scripts/install 階段會(huì)從 github.com 上下載一個(gè) .node 文件宣增,
大部分安裝不成功的原因都源自這里玫膀,因?yàn)?GitHub Releases 里的文件都托管在 s3.amazonaws.com 上面,
而這個(gè)網(wǎng)址在國(guó)內(nèi)總是網(wǎng)絡(luò)不穩(wěn)定爹脾,所以我們需要通過(guò)第三方服務(wù)器下載這個(gè)文件
嘗試cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org

# cnpm install node-sass@4.5.3 --save
或者在項(xiàng)目下建一個(gè)文件.npmrc 輸入如下代碼
sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
phantomjs_cdnurl=https://npm.taobao.org/mirrors/phantomjs/
electron_mirror=https://npm.taobao.org/mirrors/electron/
registry=https://registry.npm.taobao.org

# 或者這樣解決

npm install  --registry http://registry.npmjs.org/ -unsafe-perm
mac或者linux安裝報(bào)錯(cuò)可能要帶這個(gè)參數(shù)  -unsafe-perm

踩坑和問(wèn)題

enkins下執(zhí)行 ng build 命令會(huì)提示“命令未找到”帖旨,但是執(zhí)行如 ls 等原生命令沒(méi)有任何問(wèn)題。在Linux主機(jī)是通過(guò)修改 /etc/profile 文件來(lái)配置環(huán)境變量灵妨,則問(wèn)題可能是Jenkins在執(zhí)行shell腳本時(shí)沒(méi)有加載 /etc/profile 文件解阅,因此找不到 ng 命令,會(huì)提示“命令未找到”泌霍。

● Jenkins默認(rèn)情況下執(zhí)行shell腳本是使用非登錄方式货抄,然而非登錄方式不會(huì)加載 /etc/profile 文件,在 Execute shell 中 添加如 #!/bin/sh -l 命令修改為登錄方式即可解決問(wèn)題朱转。
搞了好久蟹地,還是報(bào)錯(cuò)命令找不到,各種費(fèi)勁藤为。于是機(jī)智的我把這個(gè)問(wèn)題跳過(guò)了怪与,先湊合用吧。

這段你就當(dāng)看不到就行了

啊缅疟,呸琼梆,讓你費(fèi)勁,我跳過(guò)這一步窿吩。
分析:angular-cli提供了各種方便的編譯環(huán)境茎杂,我為什么不能用一下。
比如使用其下優(yōu)勢(shì):
1.自動(dòng)代理插件 纫雁,解決跨域問(wèn)題
2.服務(wù)器功能煌往,解決另外部署服務(wù)器功能
3.自動(dòng)檢測(cè)文件改動(dòng),自動(dòng)編譯后拉起瀏覽器轧邪。使用這個(gè)功能刽脖,就不需要jenkins構(gòu)建完了執(zhí)行shell腳本了。直接ng server后忌愚,有文件更新cli會(huì)自動(dòng)編譯曲管,萬(wàn)一有重大更新,比如增加了node 的依賴庫(kù)或者依賴插件硕糊,那么登陸服務(wù)器執(zhí)行如下腳本即可

cd /local/jenkins/workspace/cloud_front
npm install

nohup sh run.sh >run.log 2>1 &

其中run.sh腳本如下
#!/bin/sh -l
ng serve --port 4201 --base-href  --proxy-config proxy.conf.json --host 0.0.0.0

運(yùn)行的日志就在run.log中院水,如果你想查看可以tail
tail -f run.log
# 機(jī)智如我腊徙,呵呵。啊檬某,呸撬腾,浪費(fèi)我兩個(gè)小時(shí)解決命令行找不到

-- 擴(kuò)展命令
查看關(guān)閉/后臺(tái)任務(wù)
jobs
kill %job進(jìn)程號(hào)

4.記得修改端口,防止占用或沖突恢恼,綜上所述民傻,ng腳本如下 ng serve --port 4201 --base-href --proxy-config proxy.conf.json --host 0.0.0.0

2018年6月18號(hào)補(bǔ)充

服務(wù)器阿里云 npm不穩(wěn)定,我猜測(cè)是網(wǎng)絡(luò)的問(wèn)題场斑,比如node-sass經(jīng)常安裝失敗漓踢,切換淘寶源也不行,隨改為yarn漏隐,相關(guān)腳本記錄如下

關(guān)于yarn https://yarn.bootcss.com/

yarn
# 殺死進(jìn)程
PID=$(netstat -nlp | grep :4203 | awk '{print $7}' | awk -F"/" '{ print $1 }')
if [ -z "$PID" ]
then
    echo Application is already stopped
else
    echo kill $PID
    kill $PID
fi

#啟動(dòng)
 nohup  yarn start-prod >log.log 2>1 & 

jenkins maven構(gòu)建速度慢

加大jvm內(nèi)存
-Xms800m -Xmx800m -XX:MaxNewSize=512m  -XX:MaxPermSize=512m

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末喧半,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子锁保,更是在濱河造成了極大的恐慌薯酝,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爽柒,死亡現(xiàn)場(chǎng)離奇詭異吴菠,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)浩村,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)做葵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人心墅,你說(shuō)我怎么就攤上這事酿矢。” “怎么了怎燥?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵瘫筐,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我铐姚,道長(zhǎng)策肝,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任隐绵,我火速辦了婚禮之众,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘依许。我一直安慰自己棺禾,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布峭跳。 她就那樣靜靜地躺著膘婶,像睡著了一般缺前。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上竣付,一...
    開(kāi)封第一講書(shū)人閱讀 50,050評(píng)論 1 291
  • 那天诡延,我揣著相機(jī)與錄音滞欠,去河邊找鬼古胆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛筛璧,可吹牛的內(nèi)容都是我干的逸绎。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼夭谤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼棺牧!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起朗儒,我...
    開(kāi)封第一講書(shū)人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤颊乘,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后醉锄,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體乏悄,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年恳不,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了檩小。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡烟勋,死狀恐怖规求,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情卵惦,我是刑警寧澤阻肿,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站沮尿,受9級(jí)特大地震影響丛塌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蛹找,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一姨伤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧庸疾,春花似錦乍楚、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)忿偷。三九已至,卻和暖如春臊泌,著一層夾襖步出監(jiān)牢的瞬間鲤桥,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工渠概, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留茶凳,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓播揪,卻偏偏與公主長(zhǎng)得像贮喧,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子猪狈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容