Day Three -- 設(shè)計(jì)你的流水線瓣距,實(shí)現(xiàn)持續(xù)部署

訓(xùn)練營(yíng)往期回顧:

Day Zero – 開(kāi)通效率云服務(wù) <<

Day One 之理念篇: DevOps與敏捷黔帕,用戶(hù)故事地圖,價(jià)值流圖

Day One 之實(shí)操篇--產(chǎn)品規(guī)劃蹈丸,定制看板成黄,生成迭代計(jì)劃

Day Two -- Part1: 托管你的代碼

Day Two -- Part2: 設(shè)計(jì)提交規(guī)范呐芥,代碼評(píng)審規(guī)范,設(shè)計(jì)提交流水線

注: 今天的實(shí)操課程涉及到購(gòu)買(mǎi)百度云BCC資源, 請(qǐng)大家提前聯(lián)系講師申請(qǐng)代金券

原理: 從持續(xù)集成到持續(xù)部署

開(kāi)發(fā)和發(fā)布軟件可能是一個(gè)復(fù)雜的過(guò)程奋岁,尤其是當(dāng)應(yīng)用程序贩耐,團(tuán)隊(duì)和部署基礎(chǔ)架構(gòu)本身變得復(fù)雜時(shí)。通常厦取,隨著項(xiàng)目的發(fā)展,挑戰(zhàn)變得更加明顯管搪。為了以快速一致的方式開(kāi)發(fā)虾攻,測(cè)試和發(fā)布軟件,開(kāi)發(fā)人員和組織需要?jiǎng)?chuàng)建了三種相關(guān)但不同的策略來(lái)管理和自動(dòng)化這些過(guò)程更鲁。

持續(xù)集成的重點(diǎn)是每天多次將各開(kāi)發(fā)人員的工作集成到主存儲(chǔ)庫(kù)中霎箍,及早捕獲集成錯(cuò)誤并加速協(xié)作開(kāi)發(fā)。持續(xù)交付要減少部署或發(fā)布過(guò)程中的摩擦澡为,自動(dòng)執(zhí)行部署構(gòu)建所需的步驟漂坏,以便可以隨時(shí)安全地發(fā)布代碼。每次進(jìn)行代碼更改時(shí)媒至,通過(guò)自動(dòng)部署顶别,持續(xù)部署將更進(jìn)一步。

持續(xù)集成

持續(xù)集成是一種鼓勵(lì)開(kāi)發(fā)人員盡早并經(jīng)常將其代碼集成到共享代碼庫(kù)主干的實(shí)踐拒啰。在一天的開(kāi)發(fā)周期結(jié)束時(shí)驯绎,代碼與每個(gè)開(kāi)發(fā)人員多次集成到共享代碼庫(kù)中,而不是孤立地構(gòu)建功能并在開(kāi)發(fā)周期結(jié)束時(shí)集成它們谋旦。

這個(gè)方法試圖通過(guò)盡早集成來(lái)降低成本剩失。開(kāi)發(fā)人員可以盡早發(fā)現(xiàn)新代碼和現(xiàn)有代碼之間的沖突,而沖突越早越相對(duì)容易協(xié)調(diào)册着。一旦沖突得到解決拴孤,工作可以繼續(xù)保證新代碼符合現(xiàn)有代碼庫(kù)的要求。

然而甲捏,經(jīng)常集成代碼本身并不能保證新代碼或功能的質(zhì)量演熟。在許多組織中,集成是昂貴的司顿,因?yàn)橥ㄟ^(guò)人工來(lái)確保代碼符合標(biāo)準(zhǔn)绽媒,不會(huì)引入錯(cuò)誤,并且不會(huì)破壞現(xiàn)有功能免猾。當(dāng)自動(dòng)化水平與現(xiàn)有的質(zhì)量保證措施數(shù)量不匹配時(shí)是辕,頻繁的集成會(huì)產(chǎn)生摩擦。

為了解決集成過(guò)程中的這種摩擦猎提,在實(shí)操中获三,持續(xù)集成依賴(lài)于強(qiáng)大的測(cè)試套件和運(yùn)行這些測(cè)試的自動(dòng)化系統(tǒng)旁蔼。當(dāng)開(kāi)發(fā)人員將代碼合并到主存儲(chǔ)庫(kù)中時(shí),自動(dòng)化流程將啟動(dòng)新代碼的構(gòu)建疙教。然后棺聊,針對(duì)新構(gòu)建運(yùn)行測(cè)試套件以檢查是否引入了任何集成問(wèn)題。如果構(gòu)建階段或測(cè)試階段失敗贞谓,團(tuán)隊(duì)將收到警報(bào)限佩,以便修復(fù)。

持續(xù)集成的最終目標(biāo)是使集成成為簡(jiǎn)單裸弦,可重復(fù)的過(guò)程祟同,這是日常開(kāi)發(fā)工作流程的一部分,以便盡早降低集成成本并對(duì)缺陷做出響應(yīng)理疙。努力確保系統(tǒng)健壯晕城,自動(dòng)化和快速,同時(shí)培養(yǎng)鼓勵(lì)頻繁迭代和響應(yīng)構(gòu)建問(wèn)題的團(tuán)隊(duì)文化窖贤,這是戰(zhàn)略成功的基礎(chǔ)砖顷。


代碼的持續(xù)集成

持續(xù)交付

持續(xù)交付

持續(xù)交付是持續(xù)集成的延伸。它側(cè)重于自動(dòng)化軟件交付流程赃梧,以便團(tuán)隊(duì)可以隨時(shí)輕松滤蝠,自信地將代碼部署到生產(chǎn)環(huán)境中。通過(guò)確保代碼庫(kù)始終處于可部署狀態(tài)授嘀,軟件發(fā)布不再需要復(fù)雜的儀式几睛,成了小事一樁,粤攒。團(tuán)隊(duì)可以確信他們可以在沒(méi)有復(fù)雜協(xié)調(diào)或后期測(cè)試的情況下隨時(shí)發(fā)布所森。與持續(xù)集成一樣,持續(xù)交付是一種需要技術(shù)和組織改進(jìn)相結(jié)合的實(shí)踐夯接。

在技??術(shù)方面焕济,持續(xù)交付嚴(yán)重依賴(lài)部署流水線來(lái)讓測(cè)試和部署過(guò)程自動(dòng)化。部署流水線是一種自動(dòng)化系統(tǒng)盔几,能夠?qū)⒁淮螛?gòu)件分解成一系列的順序階段晴弃,并且在這些階段中運(yùn)行越來(lái)越嚴(yán)苛的測(cè)試套件。持續(xù)交付取決于持續(xù)集成的情況逊拍,因此可靠的持續(xù)集成設(shè)置是實(shí)現(xiàn)持續(xù)交付的先決條件上鞠。

在每個(gè)階段,構(gòu)建要么未通過(guò)測(cè)試芯丧,要么向團(tuán)隊(duì)發(fā)出警報(bào)芍阎,要么通過(guò)測(cè)試,從而導(dǎo)致自動(dòng)進(jìn)階到下一階段缨恒。隨著構(gòu)建在流水線中移動(dòng)谴咸,后續(xù)階段會(huì)將構(gòu)建制品部署到與生產(chǎn)環(huán)境盡可能相似的鏡像環(huán)境中轮听。這樣,可以同時(shí)測(cè)試構(gòu)建岭佳,部署過(guò)程和環(huán)境血巍。流水線結(jié)束時(shí)會(huì)產(chǎn)生一個(gè)構(gòu)建制品擅腰,這樣的話夭苗,當(dāng)希望部署到生產(chǎn)環(huán)境中時(shí)便可以一步到位缺厉。

持續(xù)交付的組織方面鼓勵(lì)將“可部署性”作為主要關(guān)注點(diǎn)的優(yōu)先級(jí)枪蘑。這會(huì)對(duì)構(gòu)建功能的方式產(chǎn)生影響,并將其連接到代碼庫(kù)的其余部分蘸际。必須考慮到代碼的設(shè)計(jì)宣增,以便功能可以隨時(shí)安全地部署到生產(chǎn)中诲祸,即使在不完整時(shí)也是如此京办。在這方面,行業(yè)已經(jīng)出現(xiàn)了許多成熟的技術(shù)實(shí)踐帆焕,比如藍(lán)綠部署惭婿、抽象分支、制品庫(kù)叶雹、金絲雀發(fā)布财饥、暗啟動(dòng)、部署流水線折晦、特型開(kāi)關(guān)等钥星。

持續(xù)交付很有吸引力,因?yàn)樗梢宰詣?dòng)化地執(zhí)行從代碼入庫(kù)到?jīng)Q定是否將構(gòu)建上生產(chǎn)環(huán)境這段過(guò)程满着。幫助評(píng)估代碼質(zhì)量和正確性的步驟是自動(dòng)化的谦炒,但最終決定發(fā)布什么掌握在組織的手里,從而保留了最大的靈活性风喇。

持續(xù)部署


持續(xù)部署

持續(xù)部署是持續(xù)交付的擴(kuò)展宁改,能夠自動(dòng)地通過(guò)完整測(cè)試周期來(lái)部署每個(gè)構(gòu)建制品。連續(xù)部署系統(tǒng)不會(huì)等待人來(lái)決定部署什么魂莫、何時(shí)部署还蹲,而是任何成功通過(guò)部署流水線的所有東西都會(huì)被自動(dòng)部署。不過(guò)耙考,雖然新代碼被自動(dòng)部署到了生產(chǎn)環(huán)境谜喊,但仍然有一些技術(shù)方法能夠讓你這之后決定是否激活新功能或者是否只對(duì)小范圍用戶(hù)激活新功能。自動(dòng)部署會(huì)將功能和修復(fù)代碼迅速推給客戶(hù)倦始,這樣做不僅能夠鼓勵(lì)團(tuán)隊(duì)在有限范圍內(nèi)進(jìn)行較小的更改斗遏,還能夠有助于避免對(duì)當(dāng)前部署到生產(chǎn)環(huán)境的內(nèi)容產(chǎn)生混亂。

持續(xù)部署還允許組織受益于一致的早期反饋鞋邑。功能可以立即提供給用戶(hù)最易,而缺陷或無(wú)用的實(shí)現(xiàn)可以讓團(tuán)隊(duì)在沒(méi)有效益的方向上投入大量精力之前被感知到怒坯。盡早發(fā)現(xiàn)某個(gè)功能沒(méi)用,團(tuán)隊(duì)便能盡快轉(zhuǎn)移焦點(diǎn)藻懒,而不再將更多的能量投入到影響最小的地方。


實(shí)操: 準(zhǔn)備持續(xù)交付制品庫(kù)

1.從效率云首頁(yè)進(jìn)入iRepo制品庫(kù)

進(jìn)入iRepo

2 點(diǎn)擊新建制品庫(kù)按鈕


新建制品庫(kù)


新建制品庫(kù)

3 制品庫(kù)名稱(chēng)輸入“JavaDemoRepo”

4 制品庫(kù)標(biāo)識(shí)輸入“JavaDemoRepo”

5 制品庫(kù)描述輸入“JavaDemoRepo”

6 點(diǎn)擊創(chuàng)建按鈕完成制品庫(kù)創(chuàng)建

準(zhǔn)備持續(xù)部署云服務(wù)器

Step 1:購(gòu)買(mǎi)BCC云服務(wù)器

1 訪問(wèn)BCC首頁(yè)https://console.bce.baidu.com/bcc/#/bcc/instance/list

創(chuàng)建BCC實(shí)例

2 點(diǎn)擊“創(chuàng)建實(shí)例”按鈕進(jìn)入BCC服務(wù)器創(chuàng)建界面

BCC服務(wù)器配置

3 實(shí)例最低配置如下:

*注: 請(qǐng)使用CENTOS系統(tǒng)限番,發(fā)布插件目前暫不支持Ubuntu系統(tǒng)

BCC最基本配置

4 點(diǎn)擊“下一步”按鈕珠插,進(jìn)入訂單確認(rèn)與支付界面

特別注意:接下來(lái)的環(huán)節(jié)請(qǐng)?zhí)貏e要注意在支付之前要激活代金券缤底,并且選擇使用代金券支付。

代金券激活

5 點(diǎn)擊“激活代金券”

6 輸入代金券編號(hào)

7 點(diǎn)擊“確認(rèn)”按鈕來(lái)激活該代金券

8 在產(chǎn)品類(lèi)型:BCC中選擇剛剛激活的代金券

9 在產(chǎn)品類(lèi)型:CDS中選擇剛剛激活的代金券

10 在產(chǎn)品類(lèi)型:EIP中選擇剛剛激活的代金券

11 點(diǎn)擊“去支付”按鈕鲁沥,完成實(shí)例的購(gòu)買(mǎi)和開(kāi)通

成功開(kāi)通BCC服務(wù)器

12 隨后請(qǐng)返回BCC首頁(yè)https://console.bce.baidu.com/bcc/#/bcc/instance/list缠局,查看實(shí)例創(chuàng)建情況和公網(wǎng)IP地址

Step 2:安裝BCCDeploy客戶(hù)端

1 通過(guò)ssh客戶(hù)端登錄BCC服務(wù)器唱矛,用戶(hù)名為root,密碼為創(chuàng)建實(shí)例時(shí)所輸入的密碼包个。Windows用戶(hù)可以下載Putty等SSH軟件實(shí)現(xiàn)遠(yuǎn)程登錄

2 執(zhí)行如下命令完成BCCDeploy安裝:

useradd work && cd /home/work && wgethttp://sugarheap.bid.local.baidubce.com:15505/download?fileName=salt-64.tar.gz-O salt.tar.gz && tar -xzvf ./salt.tar.gz && sh ./bin/controlstart

3 查看服務(wù)運(yùn)行狀態(tài)搀菩,執(zhí)行命令sh./bin/control status


檢查服務(wù)運(yùn)行情況

Running說(shuō)明客戶(hù)端已經(jīng)處于運(yùn)行狀態(tài)土砂。

警告:任何導(dǎo)致BCC服務(wù)器sshkey發(fā)生變化的操作都將導(dǎo)致BCCDeploy無(wú)法重新安裝啟動(dòng)。禁止進(jìn)行如下已知的風(fēng)險(xiǎn)操作:重裝BCC操作系統(tǒng)、使用keygen生成新key。

Step 3:安裝java環(huán)境

1 運(yùn)行命令yum -y install java-1.8.0-openjdk*進(jìn)行Java安裝

2 運(yùn)行命令java -version驗(yàn)證Java安裝情況:

服務(wù)器安裝java環(huán)境

Step 4:準(zhǔn)備部署啟停腳本

1 ]創(chuàng)建工作目錄悼瘾,執(zhí)行如下命令:mkdir -p /javademo && cd /javademo

2 創(chuàng)建服務(wù)自動(dòng)啟動(dòng)腳本,執(zhí)行如下命令

cat>start.sh<

#!/bin/sh

set -e

cd /javademo/target

nohup java -jar gs-spring-boot-0.1.0.jar /dev/null & sleep 20

EOF

3 創(chuàng)建服務(wù)自動(dòng)停止腳本怎抛,執(zhí)行如下命令

cat>stop.sh<

#!/bin/sh

set -e

echo $(echo $\(pkill java\))

exit 0

EOF

4 創(chuàng)建自動(dòng)部署目標(biāo)目錄挣菲,執(zhí)行如下命令

mkdir -p target

5 檢查創(chuàng)建的內(nèi)容富稻,執(zhí)行如下命令: ls && cat start.sh && cat stop.sh

執(zhí)行結(jié)果如下:


創(chuàng)建執(zhí)行腳本

注意:?jiǎn)?dòng)腳本中的" </dev/null &>/dev/null &sleep 20" 為BCC服務(wù)器部署的特殊要求,不得省略白胀。sleep 20用于設(shè)定服務(wù)啟動(dòng)的超時(shí)時(shí)長(zhǎng)為20秒椭赋,該時(shí)長(zhǎng)可根據(jù)實(shí)際需要調(diào)整。

搭建持續(xù)交付或杠、部署流水線

Step 1:創(chuàng)建流水線哪怔,進(jìn)入iPipe首頁(yè)

創(chuàng)建發(fā)布流水線

1 從JavaDemo代碼庫(kù)左側(cè)的導(dǎo)航點(diǎn)擊“持續(xù)集成”進(jìn)入iPipe界面

新建一條流水線

2 點(diǎn)擊右上角--新建流水線

Step 2:配置觸發(fā)方式和監(jiān)聽(tīng)分支


流水線配置

1 流水線名稱(chēng)輸入“交付部署流水線”

2 觸發(fā)方式為自動(dòng)觸發(fā)

3 監(jiān)聽(tīng)分支選擇精確匹配

4 分支名稱(chēng)為master

5 監(jiān)聽(tīng)的消息類(lèi)型為Merge,即代碼合入時(shí)觸發(fā)

6 點(diǎn)擊添加按鈕

Step 3:編排持續(xù)交付階段

增加一個(gè)stage

1 點(diǎn)擊添加階段按鈕

2 階段名稱(chēng)輸入“自動(dòng)交付”向抢,我們希望在這個(gè)階段在流水線被觸發(fā)時(shí)順序執(zhí)行如下工作:

- 自動(dòng)單元測(cè)試和集成測(cè)試

- 打包并上傳到制品庫(kù)

3 觸發(fā)方式為自動(dòng)

4 失敗策略為快速失敗

5 點(diǎn)擊添加新任務(wù)按鈕

增加mave構(gòu)建任務(wù)

6 選擇Maven構(gòu)建任務(wù)

7 點(diǎn)擊添加按鈕认境,我們希望在這個(gè)任務(wù)重進(jìn)行自動(dòng)化測(cè)試和打包,并且如果測(cè)試和打包成功挟鸠,自動(dòng)將打包產(chǎn)出上傳到之前建立的制品庫(kù)中叉信。

設(shè)置maven構(gòu)建任務(wù)

8 命令輸入:

cd complete/

mvn verify install

9 勾選上傳復(fù)選框

10 產(chǎn)出包路徑輸入target

11 制品庫(kù)選擇此前創(chuàng)建的JavaDemoRepo

12 制品名稱(chēng)為JavaDemo

Step 4:編排持續(xù)部署階段

在這個(gè)階段,我們希望上一個(gè)階段的打包產(chǎn)出上傳部署到BCC服務(wù)器艘希,并且自動(dòng)啟動(dòng)服務(wù)硼身。

增加一個(gè)發(fā)布的stage

1 點(diǎn)擊添加階段按鈕

配置發(fā)布stage

2 階段名稱(chēng)為“自動(dòng)部署”

3 觸發(fā)方式選擇自動(dòng)觸發(fā)

4 失敗策略選擇快速失敗

5 點(diǎn)擊添加新任務(wù)按鈕

使用BID部署插件

6 選擇并雙擊“Bid部署”

7 執(zhí)行賬戶(hù)為root

8 部署路徑設(shè)為/javademo/

9 停止命令設(shè)為sh /javademo/stop.sh

10 啟動(dòng)命令設(shè)為sh /javademo/start.sh

11 部署驗(yàn)證選擇“自動(dòng)檢查驗(yàn)證”

12 檢查URL設(shè)為http://<你的BCC公網(wǎng)IP>:8080/

注意事項(xiàng):檢查URL要求返回值為{"errno":0,"info":"Ok"},這也是之前將服務(wù)代碼返回值修改為這個(gè)字符串的原因覆享。

13 點(diǎn)擊添加服務(wù)器按鈕

添加一臺(tái)BCC服務(wù)器

14 勾選之前購(gòu)買(mǎi)的BCC服務(wù)器

15 點(diǎn)擊確定按鈕

16 點(diǎn)擊保存按鈕保存流水線

完成第一次交付和部署

Step 1:修改集成測(cè)試用例

修改測(cè)試用例

1 打開(kāi)集成測(cè)試源碼文件complete/src/test/java/hello/HelloControllerIT.java佳遂,定位到第39行

2 將期望值修改為"{\"errno\":0,\"info\":\"Ok\"}",并保存

修改測(cè)試用例

3 執(zhí)行命令git diff查看變更情況

查看代碼變更

4 執(zhí)行命令git commit -am "Correct obsolete integration testing return value"

執(zhí)行g(shù)it commit

5 執(zhí)行命令git push origin HEAD:refs/for/master

將代碼push到iCode服務(wù)器

Step 2:完成評(píng)審并合入代碼淹真,如果您實(shí)踐過(guò)第二天part two的內(nèi)容讶迁,里面有關(guān)于代碼評(píng)審的操作記錄。

Step 3:查看交付和部署執(zhí)行情況

查看流水線執(zhí)行

1 從代碼庫(kù)導(dǎo)航中點(diǎn)擊持續(xù)集成鏈接進(jìn)入流水線界面

查看剛建立的交付部署流水線

2 稍等片刻,即可看到流水線已經(jīng)執(zhí)行完畢

3 點(diǎn)擊交付流部署水線查看詳情

4 自動(dòng)交付階段顯示為綠色巍糯,表示執(zhí)行成功啸驯,用時(shí)3分半左右,點(diǎn)擊可展開(kāi)

5 自動(dòng)部署階段也顯示為綠色祟峦,表示成功罚斗,點(diǎn)擊可展開(kāi)

執(zhí)行成功

6 展開(kāi)自動(dòng)部署階段

7 點(diǎn)擊查看部署詳情按鈕,進(jìn)入到百度云部署任務(wù)詳情頁(yè)面

BID智能變更

8 執(zhí)行情況顯示計(jì)劃部署1臺(tái)BCC服務(wù)器宅楞,實(shí)際成功完成了1臺(tái)部署针姿,點(diǎn)擊查看實(shí)例詳情鏈接

實(shí)例部署詳情

9 選擇我們剛剛部署的那臺(tái)服務(wù)器,點(diǎn)擊進(jìn)入執(zhí)行詳情厌衙,查看執(zhí)行日志

查看實(shí)例部署

從日志中距淫,你可以看到執(zhí)行了“下載-停止服務(wù)-部署和備份-啟動(dòng)服務(wù)”的部署全程。如果您在之前購(gòu)買(mǎi)了彈性公網(wǎng)地址婶希,您可以通過(guò)輸入公網(wǎng)地址:8080查看服務(wù)部署的最終效果:

服務(wù)部署的效果


到這里榕暇,很榮幸的告訴你,你已經(jīng)成功第一次成功利用百度效率云完成了從本地代碼到線上服務(wù)整個(gè)過(guò)程喻杈,邁出了內(nèi)建質(zhì)量彤枢、自動(dòng)化測(cè)試、持續(xù)集成筒饰、持續(xù)交付缴啡、持續(xù)部署的實(shí)戰(zhàn)的第一步!??????

打卡截圖1: 部署流水線

流水線截圖

打卡截圖2: BCC部署成功截圖

BCC部署成功
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瓷们,一起剝皮案震驚了整個(gè)濱河市业栅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌换棚,老刑警劉巖式镐,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件反镇,死亡現(xiàn)場(chǎng)離奇詭異固蚤,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)歹茶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)夕玩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人惊豺,你說(shuō)我怎么就攤上這事燎孟。” “怎么了尸昧?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵揩页,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我烹俗,道長(zhǎng)爆侣,這世上最難降的妖魔是什么萍程? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮兔仰,結(jié)果婚禮上茫负,老公的妹妹穿的比我還像新娘。我一直安慰自己乎赴,他們只是感情好忍法,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著榕吼,像睡著了一般饿序。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上羹蚣,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天嗤堰,我揣著相機(jī)與錄音,去河邊找鬼度宦。 笑死踢匣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的戈抄。 我是一名探鬼主播离唬,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼划鸽!你這毒婦竟也來(lái)了输莺?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤裸诽,失蹤者是張志新(化名)和其女友劉穎嫂用,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體丈冬,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嘱函,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了埂蕊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片往弓。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蓄氧,靈堂內(nèi)的尸體忽然破棺而出函似,到底是詐尸還是另有隱情,我是刑警寧澤喉童,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布撇寞,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蔑担。R本人自食惡果不足惜露氮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望钟沛。 院中可真熱鬧畔规,春花似錦、人聲如沸恨统。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)畜埋。三九已至莫绣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間悠鞍,已是汗流浹背对室。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留咖祭,地道東北人掩宜。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像么翰,于是被迫代替她去往敵國(guó)和親牺汤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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