iOS Jenkins自動打包配置全流程(2020年版 上傳蒲公英+釘釘通知)

強烈建議一定要在網絡好的情況下配置序苏,并且最好能上外網呻顽,不然折磨死你!

為什么寫這篇文章了,因為到目前為止我還沒看到一篇完善靠譜的iOS Jenkins配置文章。

首先我這里安裝配置Jenkins都是使用Homebrew倘零。
Homebrew是一款Mac OS平臺下的軟件包管理工具. 官網這里 Homebrew

安裝以及操作步驟

  • 1.安裝Homebrew
  • 2.使用Homebrew安裝Jenkins
  • 3.安裝Jenkins插件
  • 4.配置證書
  • 5.創(chuàng)建項目配置
  • 6.腳本配置
  • 7.項目打包
1.1 安裝Homebrew,在終端運行以下指令安裝
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

安裝成功后顯示

==> Installation successful!

==> Homebrew has enabled anonymous aggregate formulae and cask analytics.
Read the analytics documentation (and how to opt-out) here:
https://docs.brew.sh/Analytics
No analytics data has been sent yet (or will be during this `install` run).

==> Homebrew is run entirely by unpaid volunteers. Please consider donating:
https://github.com/Homebrew/brew#donations

==> Next steps:
- Run `brew help` to get started
- Further documentation: 
 [https://docs.brew.sh](https://docs.brew.sh)

執(zhí)行 brew -v 來查看安裝版本

brew -v

顯示如下則說明Homebrew安裝成功

Homebrew 2.5.9-48-gf2d46ef

Homebrew/homebrew-core (git revision cb8d; last commit 2020-11-11)

edison@192 ~ % 

如果已經安裝的則建議更新一下Homebrew,運行以下指令更新

brew update
2.1 通過Homebrew安裝Jenkins

這里需要注意:
因為安裝Jenkins需要依賴jdk,所以當我們用最新的Homebrew來安裝Jenkins時會默認先安裝 jdk 11版本
來源看這里 https://formulae.brew.sh/formula/jenkins

但是如果我們的項目是在gitlab上開發(fā)绰上,那么我們在Jenkins里需要安裝gitlab相關插件,gitlab需要依賴ruby-runtime渠驼。但是目前ruby-runtime是不支持jdk 11的蜈块。

這就是為什么你按照其他的教程來安裝Jenkins時,教程里告訴你需要先安裝jdk迷扇,然后你安裝jdk 8的版本后百揭,再用Homebrew來安裝Jenkins時,結果在安裝gitlab插件時蜓席,安裝ruby-runtime一直顯示錯誤

java.lang.RuntimeException: unsupported Java version: 11 

所以你以為自己安裝了jdk 8器一,其實Homebrew已經重新下載了一份jdk 11文件,并和Jenkins形成了依賴關系。
說了這么多瓮床,怎么解決呢盹舞?

在你已經安裝Homebrew的情況下,并且還沒安裝Jenkins時隘庄,先全局搜索Jenkins踢步,找到如下兩個文件

#3 of Mac Rlme #7.png

這兩個文件是你安裝Jenkins時配置jdk的文件。
把里面openjdk@11 改成openjdk@8丑掺,
java_version: “11” 改成java_version: “8”获印,

rb jenkins-Its.rb.png

這樣一改那么你在下載Jenkins時就會默認下載jdk 8,注意兩個文件都要改好后保存街州。

接下來安裝Jenkins兼丰,終端執(zhí)行命令安裝Jenkins

brew install jenkins-lts

安裝完成后會出現

==> jenkins-lts
Note: When using launchctl the port will be 8080.
To have launchd start jenkins-lts now and restart at login:
brew services start jenkins-lts
Or, if you don't want/need a background service you can just run:
 jenkins-lts

安裝完成后啟動Jenkins

brew services start jenkins-lts

注意我們這里的jenkins-lts就相當于Jenkins命令,這是官方提供的一種安裝方式
所以當你用jenkins-lts命令安裝后唆缴,執(zhí)行Jenkins命令就無效
官網這里 https://www.jenkins.io/download/lts/macos/
有些博客上是寫Jenkins來啟動服務 (在這里就是jenkins-lts命令了)

但是直接用Jenkins命令啟動服務鳍征,這樣就會導致你每次重啟瀏覽器都要執(zhí)行這個命令,不然就會報你的登錄名和密碼錯誤面徽。

所以建議使用brew services start jenkins-lts來啟動Jenkins服務艳丛,這樣不必每次都要執(zhí)行命令來啟動Jenkins

啟動Jenkins后再瀏覽器輸入以下地址

http://localhost:8080

打開之后就會出現


#41 Jenkins.png

此時說明Jenkins已經安裝并且啟動成功

然后通過以下地址找到密碼文件initialAdminPassword
注意這里可能因為個人電腦配置而導致路徑差異,要以上圖中的路徑為依據

/Users/edison/.jenkins/secrets/initialAdminPassword

用文本軟件打開initialAdminPassword文件把密碼輸入,點擊繼續(xù)

2.2 安裝推薦的插件

如果正常進入此頁面 點擊安裝推薦的插件

ETE X Jenkins.png

此時如果出現Jenkins離線趟紊,則是網絡問題導致氮双,這個自己想辦法解決網絡問題

一定要把所有軟件安裝成功才進行下一步,如果安裝失敗點擊重試霎匈。

SSH Credentials.png
3.1安裝自己需要的插件

在首頁點擊Manage Jenkins->System Configuration->Manage Plugins ->可選插件戴差,
然后搜索以下列出的插件安裝

  • GitLab Plugin 因為項目代碼是部署在gitlab上,所以需要安裝
  • Gitlab Hook Plugin
  • Xcode integration
  • Keychains and Provisioning Profiles Management 配置證書
  • DingTalk 打包成功通知群里測試
  • Git Parameter Plug-In 配置打包多個分支
4.1配置證書

由于打包需要手動配置證書铛嘱,所以這里需要上傳KeychainsProvisioning描述文件兩個文件
在首頁點擊Manage Jenkins->Uncategorized->Keychains and Provisioning Profiles Management
注意在頁面最底部

配置鑰匙串和描述文件這里需要注意一下

很多人估計在這里會被坑到暖释,這個應該也是Jenkins頁面設計的一個缺陷袭厂。
那就是大家點擊選取login.keychain之后,然后點擊upload球匕。此時鑰匙串keychain是上傳成功了嵌器。
但是Provisioning描述文件就沒有去選取和upload上傳。
我想應該是大家看到選取上傳按鈕只有一個谐丢,覺得選取上傳按鈕和對應的文件是一一對應的爽航。
也就是會顧慮到我在同一個地方再上傳Provisioning文件會覆蓋掉之前的login.keychain文件,也就是之前的文件會被丟失乾忱。

但是請注意讥珍,你點擊upload之后文件已經保存了。所以這里需要在同一個地方上傳兩個文件沒問題窄瘟。

image.png
4.2 上傳Keychains文件

點擊 選取文件 找到login.keychain這個文件

login.keychain地址

/Users/louxunmac/Library/Keychains 

注意由于系統(tǒng)版本升級現在沒有login.keychain這個文件衷佃,取而代之的是login.keychain-db文件。
所以我們需要在同一個文件夾下拷貝一份login.keychain-db文件蹄葱,然后改名成login.keychain文件
選取login.keychain之后然后點擊上傳upload

然后Keychains這里還有Identities->Code Signing Identity這里需要填寫下氏义,
在鑰匙串里找到開發(fā)環(huán)境的證書copy證書名字然后填寫到Code Signing Identity輸入框里

image.png

到此keychain配置完成

4.3 上傳Provisioning Profiles描述文件

Provisioning描述文件 地址

/Users/louxunmac/Library/MobileDevice/Provisioning Profiles

因為我的Jenkins打包是用的開發(fā)環(huán)境證書。所以這里只需要用到開發(fā)環(huán)境的Provisioning描述文件
如果用發(fā)布證書打包图云,那么別人是安裝不了的惯悠。發(fā)布證書打包唯一的安裝渠道是走app store
還是重復剛才配置keychain的上傳步驟竣况,點擊選取開發(fā)環(huán)境Provisioning描述文件
這個地址里面可能會有多個描述文件克婶,所以你要選擇你此時在Xcode里正在使用的開發(fā)環(huán)境Provisioning描述文件
選取上傳成功后然后在Provisioning Profiles Directory Path里填寫Provisioning地址

到此Provisioning配置完成

最后點擊save保存

至于最后判斷這兩項是否都配置完成可以參照我的截圖

到現在Jenkins的配置告一段落。

5.1創(chuàng)建項目

接下來是創(chuàng)建一個item丹泉,即創(chuàng)建一個項目
這里需要注意一點情萤,這里的項目名字一定是你的APP里 product name,否則打包時就會報路徑出錯導致打包失敗
實在不清楚就在Xcode build setting里搜索 product name摹恨。

image.png

然后選擇第一個自由風格筋岛,點擊確定。項目創(chuàng)建完畢晒哄。

5.2項目配置

5.2.1 代碼打包分支配置

點擊項目的配置即可進入配置頁面 ,找到并勾選 This project is parameterized
由于Git Parameter插件已經安裝睁宰,所以點擊添加參數選中Git Parameter
然后名稱寫branchName , 參數類型選擇 分支或標簽,默認值填寫origin/master 揩晴,如圖

image.png
image.png

5.2.2 項目代碼地址配置

源碼管理里選中git勋陪,Repository URL這里填寫你的git項目倉庫地址贪磺,Credentials里這里相當于配置git權限

指定分支填寫$branchName 硫兰,如圖:

image.png

Credentials配置

點擊添加Jenkins,默認進來應該就是domain是全局憑據寒锚,類型是username with password劫映,范圍是全局
那就按照默認的來配置违孝,如果不是也最好改一下。
用戶名這里填寫git賬號的用戶名泳赋,然后填寫密碼雌桑,ID就是gitUser ID
這里填寫完點擊添加如果沒有報紅就說明配置成功,不用懷疑了祖今。就如上圖所示

image.png
估計很多人在這個時候會忘記自己git賬號和密碼校坑,也不知道那個ID怎么填?然后也不好意思或者暫時不知道找誰拿回賬號密碼

因為git賬號我們只需要輸入一次就行千诬,既然只需要輸入一次耍目,那么他肯定就會保存在本地。
所以只需要找到他就行

如果你是用Sourcetree,那么點擊偏好設置->高級徐绑,如下圖
找到主機名稱邪驮,這個主機名稱就是你的git項目倉庫地址,用戶名就是你的git賬號
這里有傲茄,說明你是登錄成功狀態(tài)毅访。

image.png

打開鑰匙串,如下圖在密碼里根據你的主機名賬戶名找到對應的一行盘榨,然后選中喻粹,鼠標右鍵,復制密碼
或者選中草巡,右鍵點擊顯示簡介磷斧,查看密碼。

image.png

到此你的賬戶名和密碼都已經找到了捷犹,還差一個ID弛饭。
此時可以在瀏覽器輸入那個主機名稱的ip地址,然后輸入賬戶名和密碼驗證下萍歉。
登入成功說明git賬號密碼都是對的侣颂。
然后網頁最右上角點擊進入setting,此時setting里面那個user ID就找到了枪孩。

image.png
image.png

5.2.3設置debug憔晒,release 模式

點擊添加參數選擇choice parmaeter,然后按照下圖配置就行蔑舞。

image.png
image.png

5.2.4 KeychainsProvisioning配置

由于之前安裝配置過Keychains and Provisioning Profiles Management拒担,這里直接勾選,選擇就行攻询。完成

image.png

5.2.5釘釘機器人添加配置
在你當前的工作群里 智能群助手里添加機器人从撼。
這里需要注意兩點
0.1 Webhook 這個釘釘默認分配的,這個地址我們到時候要加在腳本里
0.2 安全設置钧栖,由于目前Jenkins里的插件只支持ip設置低零,所以這里我們先輸入配置一個ip地址婆翔。
輸入命令行

nslookup  localhost  
image.png

輸出顯示 把最后一行Address ip地址輸入點擊完成。至此釘釘機器人添加完成掏婶。

Server:     202.96.134.133
Address:    202.96.134.133#53

Name:   localhost
Address: 127.0.0.1

接下來是配置Jenkins釘釘機器人

點擊Manage Jenkins->System Configuration->configure system 找到釘釘
這里需要勾選通知時機啃奴,看個人情況勾選。
webhook填寫:釘釘群里添加的機器人里分配的webhook雄妥。
ip:釘釘群里添加的機器人里配置的ip最蕾。
然后點擊測試,此時估計會報錯老厌,不要慌揖膜,把輸入框底部提示的那個ip地址加在釘釘群里添加機器人的安全設置ip里。
然后再點擊測試梅桩,提示成功壹粟。
最后別忘了保存

image.png

7.1腳本
至此,里Jenkins打包配置就差最后一步了宿百,執(zhí)行腳本配置趁仙。
對于腳本這塊,因為沒什么研究垦页,所以就不多解釋了雀费。
但是需要注意幾點。
7.1.1.腳本里的項目名痊焊,這個也是寫的product name盏袄,
腳本里有兩個地方寫到 項目名,就在前兩行薄啥,我的項目名寫的是YunDian辕羽,到時候你們自己替換成自己的就行

7.1.2 然后說說最后蒲公英和釘釘的腳本配置,就在腳本最后兩段那里垄惧。
先說蒲公英刁愿,這里需要把userKeyapiKey替換成自己的,然后如果設置了下載密碼就把PASSWORD也填寫下
這樣蒲公英的腳本配置完成

釘釘這里需要把下載鏈接地址https://www.pgyer.com/abc改成自己項目的下載地址到逊,然后下載密碼填上铣口。
最后https://oapi.dingtalk.com/robot/send?access_token=d7bed3f96cbbbed96ed1a39ed0018bb815aa0jeeekkekeke這里替換成自己的Webhook

## 上傳蒲公英
#userKey和apiKey需要在蒲公英的賬號設置中查找
userKey="6721185289b82dcc123a2c7dddjjd"
apiKey="0385141eef7d17e0f6b5725adddddd"
PASSWORD=123
MSG=`git log -1 --pretty=%B`

#蒲公英打包
curl -F "file=@${EXPORTPATHNEWIPA}" \
-F "uKey=${userKey}" \
-F "_api_key=${apiKey}" \
-F "updateDescription=${MSG}" \
-F "password=${PASSWORD}" \
http://www.pgyer.com/apiv1/app/upload


#釘釘發(fā)布通知
message="### <font color=#00BFFF>測試環(huán)境【iOS-APP】發(fā)布成功</font>\n 下載鏈接:https://www.pgyer.com/abc\n密碼:123"
MSG_JSON='{"msgtype":"markdown","markdown":{"title":"App發(fā)布通知","text":"'${message}'"}}'
echo "${MSG_JSON}"
echo ${1}
curl 'https://oapi.dingtalk.com/robot/send?access_token=d7bed3f96cbbbed96ed1a39ed0018bb815aa0jeeekkekeke' \
        -H  'Content-Type:application/json' \
        -d  "${MSG_JSON}"

完整腳本如下,改好后直接放在構建Execute shell里面觉壶,最后保存脑题。

image.png

## !/bin/sh
## 項目名
TARGET_NAME=YunDian
## Scheme名
SCHEME=YunDian
##=======================
## 編譯類型
if [[ "${Configuration_Type}" == "Debug" ]]; then
# 測試環(huán)境
BUILD_TYPE=Debug
else
# 生產環(huán)境
BUILD_TYPE=Release
fi

## 當前目錄
SORCEPATH=${WORKSPACE}
## workspace名 YunDian.xcworkspace
SPACE=${WORKSPACE}/${TARGET_NAME}.xcworkspace
##xcarchive文件的存放路徑
ARCHIVEPATH=$SORCEPATH/build/$SCHEME.xcarchive
## ipa文件的存放路徑
EXPORTPATH=$SORCEPATH/build/$SCHEME
## ExportOptions.plist文件的存放路徑,該文件要存放在這個路徑下內容如下
EXPORTOPTIONSPLIST=$SORCEPATH/build/ExportOptions.plist
## 導出后的ipa路徑
EXPORTPATHIPA=$SORCEPATH/build/$SCHEME/$SCHEME.ipa

echo -e "============First Build Clean============"
## 清理緩存
## 如果工程使用的是cocoapods铜靶,則'-project %s.xcodeproj'替換為'-workspace %s.xcworkspace'
xcodebuild clean -workspace $SPACE -scheme ${SCHEME} -configuration ${BUILD_TYPE}

DELETEIPAFILE=$SORCEPATH/build/$SCHEME/*.ipa
rm -f ${DELETEIPAFILE}

echo -e "============Build Clean============"

## 輸出關鍵信息
echo -e "  TARGET_NAME    : ${TARGET_NAME}"
echo -e "  BUILD_TYPE    : ${BUILD_TYPE}"
echo -e "  SORCEPATH    : ${SORCEPATH}"
echo -e "  ARCHIVEPATH    : ${ARCHIVEPATH}"
echo -e "  EXPORTPATH    : ${EXPORTPATH}"
echo -e "  EXPORTOPTIONSPLIST    : ${EXPORTOPTIONSPLIST}"
echo -e "============Build Archive============"

## 導出archive包
xcodebuild archive -workspace ${SPACE} -scheme ${SCHEME} -configuration ${BUILD_TYPE} -archivePath $ARCHIVEPATH
echo -e "============Build Archive Success============"

echo -e "============Export IPA============"
## 導出IPA包
xcodebuild -exportArchive -archivePath $ARCHIVEPATH -exportPath ${EXPORTPATH} -exportOptionsPlist ${EXPORTOPTIONSPLIST}
echo -e "============Export IPA SUCCESS============"

## 編譯完成時間 20181030_0931
BUILD_DATE="$(date +'%Y%m%d_%H%M')"

## info.plist路徑
PROJECT_INFOPLIST_PATH="${SORCEPATH}/${TARGET_NAME}/Resources/Info.plist"
## 取版本號
BUNDLESHORTVERSION=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${PROJECT_INFOPLIST_PATH}")
## 取build值
VERSION=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${PROJECT_INFOPLIST_PATH}")
## ipa更名規(guī)則  項目名V版本_年月日_時分
IPANAME="${TARGET_NAME}V${BUNDLESHORTVERSION}_${BUILD_DATE}.ipa"
## 更名后ipa路徑
EXPORTPATHNEWIPA=$EXPORTPATH/$IPANAME

echo -e "============Export end :${BUILD_DATE}============"
echo -e "============IPA Old Name: ${EXPORTPATHIPA}============"
echo -e "============IPA New Name: ${EXPORTPATHNEWIPA}============"

## IPA更名
cp $EXPORTPATHIPA $EXPORTPATHNEWIPA
echo -e "============Create New Name Success============"
## 刪除老IPA
rm $EXPORTPATHIPA
echo -e "============Delete Old Name Success============"

echo -e "============Start Uploading============"


## 上傳蒲公英
#userKey和apiKey需要在蒲公英的賬號設置中查找
userKey="6721185289b82dcc123a2c7d18859fc4"
apiKey="0385141eef7d17e0f6b5725a3f22ddc0"
PASSWORD=123
MSG=`git log -1 --pretty=%B`

#蒲公英打包
curl -F "file=@${EXPORTPATHNEWIPA}" \
-F "uKey=${userKey}" \
-F "_api_key=${apiKey}" \
-F "updateDescription=${MSG}" \
-F "password=${PASSWORD}" \
http://www.pgyer.com/apiv1/app/upload


message="### <font color=#00BFFF>測試環(huán)境【iOS-樓訊云店】發(fā)布成功</font>\n 下載鏈接:https://www.pgyer.com/OmpT\n密碼:123"
MSG_JSON='{"msgtype":"markdown","markdown":{"title":"App發(fā)布通知","text":"'${message}'"}}'
echo "${MSG_JSON}"
echo ${1}
curl 'https://oapi.dingtalk.com/robot/send?access_token=d7bed3f96cbbbed96ed1a39ed0018bb815aa076330ac554f2e025111521da8c6' \
        -H  'Content-Type:application/json' \
        -d  "${MSG_JSON}"

這樣整個Jenkins配置全部完成叔遂。

但是應該不會就這么輕易打包成功。

8.1開始打包

我們點擊build with parameters,選中你要構建的分支掏熬,最后點擊開始構建。

image.png

如果構建成功那就不管了秒梅,做別的事去
大概率會報錯,當看到如下錯誤The file “ExportOptions.plist” couldn’t be opened because there is no such file時旗芬,說明ExportOptions.plist這個文件不存在。再看看報錯里面的路徑是在/Users/louxunmac/.jenkins/workspace/yundian/build/YunDian.xcarchive里沒找到捆蜀。

怎么查看錯誤疮丛,如下圖bulid history點擊構建對應的tag次數,點擊倒三角查看控制臺輸出

+ echo -e '============Build Archive Success============'
-e ============Build Archive Success============
+ echo -e '============Export IPA============'
-e ============Export IPA============
+ xcodebuild -exportArchive -archivePath /Users/louxunmac/.jenkins/workspace/yundian/build/YunDian.xcarchive -exportPath /Users/louxunmac/.jenkins/workspace/yundian/build/YunDian -exportOptionsPlist /Users/louxunmac/.jenkins/workspace/yundian/build/ExportOptions.plist
error: Couldn't load -exportOptionsPlist: The file “ExportOptions.plist” couldn’t be opened because there is no such file.

Error Domain=NSCocoaErrorDomain Code=260 "The file “ExportOptions.plist” couldn’t be opened because there is no such file." UserInfo={NSFilePath=/Users/louxunmac/.jenkins/workspace/yundian/build/ExportOptions.plist, NSUnderlyingError=0x7fe868b13e10 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}

** EXPORT FAILED **

Build step 'Execute shell' marked build as failure
Finished: FAILURE

既然沒有那么我們就創(chuàng)建一個ExportOptions.plist文件辆它。
如下圖創(chuàng)建ExportOptions.plist文件

我們需要使用Xcode來構建一個開發(fā)環(huán)境包誊薄。點擊Xcode->product->archive

選擇development

Select a method of distribution.png

注意這里 app thinning這里選擇noneadditional options 這里不要勾選 然后點擊next

Development distribution options.png

最后打包成功后锰茉,拷貝一份ExportOptions.plist文件到報錯的路徑下面/Users/louxunmac/.jenkins/workspace/yundian/build/YunDian.xcarchive呢蔫,就拷貝在build這個文件夾里

DistributionSummary.plist.png

如果出現如下錯誤,那就是ipa路徑不對飒筑,很可能是你上一步導出的包里面ExportOptions.plist文件的問題片吊,所以要按照如上打包打出。

+ cp /Users/louxunmac/.jenkins/workspace/yundian/build/YunDian/YunDian.ipa '/Users/louxunmac/.jenkins/workspace/yundian/build/YunDian/YunDianV$(MARKETING_VERSION)_20201111_1134.ipa'
cp: /Users/louxunmac/.jenkins/workspace/yundian/build/YunDian/YunDian.ipa: No such file or directory
Build step 'Execute shell' marked build as failure
Finished: FAILURE

基本到此打包就會成功协屡,如果遇到其它問題可以Google 我這里暫時只能提供這些

最后配置好了 如何讓其它機器訪問俏脊?比如讓你們公司的測試訪問你的電腦打包地址來打包

1.修改ip

homebrew.mxcl.jenkins-lts.plist文件里的httpListenAddress地址127.0.0.1 改成0.0.0.0

以下兩個地方都改一下

/Users/louxunmac/Library/LaunchAgents/homebrew.mxcl.jenkins-lts.plist 

/usr/local/Cellar/jenkins-lts/2.249.3/homebrew.mxcl.jenkins-lts.plist 

改好后要讓環(huán)境生效

1.鏈接launchd 配置文件

ln -sfv /usr/local/opt/jenkins-lts/*.plist ~/Library/LaunchAgents

2.加載文件執(zhí)行命令行:

launchctl load ~/Library/LaunchAgents/homebrew.mxcl.jenkins-lts.plist

最后重啟Jenkins

brew services restart jenkins-lts

這個時候用手機輸入ip地址 奇跡出現了(注意把下面的ip地址替換為你本機的ip地址,如下圖箭頭)

`http://10.1.221.162:8080`
image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末肤晓,一起剝皮案震驚了整個濱河市爷贫,隨后出現的幾起案子,更是在濱河造成了極大的恐慌补憾,老刑警劉巖漫萄,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異盈匾,居然都是意外死亡卷胯,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門威酒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來窑睁,“玉大人,你說我怎么就攤上這事葵孤〉Eィ” “怎么了?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵尤仍,是天一觀的道長箫津。 經常有香客問我,道長,這世上最難降的妖魔是什么苏遥? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任饼拍,我火速辦了婚禮,結果婚禮上田炭,老公的妹妹穿的比我還像新娘师抄。我一直安慰自己,他們只是感情好教硫,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布叨吮。 她就那樣靜靜地躺著,像睡著了一般瞬矩。 火紅的嫁衣襯著肌膚如雪茶鉴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天景用,我揣著相機與錄音涵叮,去河邊找鬼。 笑死伞插,一個胖子當著我的面吹牛围肥,可吹牛的內容都是我干的。 我是一名探鬼主播蜂怎,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼穆刻,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了杠步?” 一聲冷哼從身側響起氢伟,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎幽歼,沒想到半個月后朵锣,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡甸私,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年诚些,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片皇型。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡诬烹,死狀恐怖,靈堂內的尸體忽然破棺而出弃鸦,到底是詐尸還是另有隱情绞吁,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布唬格,位于F島的核電站家破,受9級特大地震影響颜说,放射性物質發(fā)生泄漏。R本人自食惡果不足惜汰聋,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一门粪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧烹困,春花似錦玄妈、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽溶弟。三九已至女淑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辜御,已是汗流浹背鸭你。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留擒权,地道東北人袱巨。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像碳抄,于是被迫代替她去往敵國和親愉老。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內容