Docker安裝Jenkins部署springBoot項(xiàng)目

前言:

1治笨、Jenkins實(shí)現(xiàn)打包部署項(xiàng)目是自動(dòng)化運(yùn)維部署的基本知識(shí),本章只為學(xué)習(xí)之用,對(duì)熟悉Jenkins流程有一定的幫助肉康。
2、生產(chǎn)上強(qiáng)烈不建議部署Jenkins到Docker容器灼舍,切記吼和!

總體流程

1、Jenkins - 2骑素、拉取githup中倉(cāng)庫(kù)代碼 - 3炫乓、打包Maven項(xiàng)目為Docker鏡像文件 - 4、上傳到目標(biāo)服務(wù)器 - 5、執(zhí)行目標(biāo)服務(wù)器內(nèi)的shell腳本末捣,啟動(dòng)Docke容器

安裝jdk1.8.0_261到宿主機(jī)

此處我們把jdk1.8.0_261安裝到/home/calebit/Desktop/soft/jdk18/目錄下侠姑。

mkdir -p /home/calebit/Desktop/soft/jdk18/
cd /home/calebit/Desktop/soft/jdk18/

下載jdk過(guò)程略...

解壓步驟略...

例:

unzip xxx.tar.gz
tar -zcxf xxx.tar.gz 

安裝 maven3.6.3到宿主機(jī)

1、此處我們把maven3.6.3安裝到/home/calebit/Desktop/soft/

mkdir -p /home/calebit/Desktop/soft/
cd /home/calebit/Desktop/soft/

2箩做、解壓步驟略...

3莽红、配置maven中央倉(cāng)庫(kù)地址,進(jìn)入本地maven解壓目錄的 配置文件conf目錄:

cd /home/calebit/Desktop/soft/apache-maven-3.6.3/conf

4卒茬、由于maven默認(rèn)中央倉(cāng)庫(kù)下載比較慢船老,我們可以更改maven倉(cāng)庫(kù)為阿里云中央倉(cāng)庫(kù)地址,我們可以 編輯 apache-maven-3.6.3/conf/settings.xml文件圃酵, 更改本地倉(cāng)庫(kù)地址和增加阿里云中央倉(cāng)庫(kù)地址:

cp settings.xml settings.xml_bak 
vim settings.xml 

打開(kāi)localRepository節(jié)點(diǎn),并且配置倉(cāng)庫(kù)目錄/mydata/mavenRepository柳畔,localRepository 的配置,可以理解成是Maven下載遠(yuǎn)程倉(cāng)庫(kù)的jar包存放到本地倉(cāng)庫(kù)的路徑郭赐,此處配置成/mydata/mavenRepository,后面我們可以通過(guò)增加掛載文件夾的方式薪韩,來(lái)和我們宿主機(jī)共享這個(gè)倉(cāng)庫(kù)。

<localRepository>/mydata/mavenRepository</localRepository>

在mirrors節(jié)點(diǎn)下增加以下內(nèi)容

<mirrors>

    <mirror>
        <id>alimaven</id>
        <mirrorOf>central</mirrorOf>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
    </mirror>
   
</mirrors>

此處為了jenkins打包時(shí)候不再去中央倉(cāng)庫(kù)拉取jar包捌锭,如果我們?cè)谖覀冏约旱腎dea中打包過(guò)我們要發(fā)布的SpringBoot項(xiàng)目的話俘陷,我們就可以把本地的maven倉(cāng)庫(kù)文件(全部文件)上傳到宿主機(jī)/mydata/mavenRepository 目錄下。這樣Jenkins打包的時(shí)候观谦,就不需要再次去中央倉(cāng)庫(kù)拉取需要的jar包了拉盾,加快了打包時(shí)間,拷貝過(guò)程略...


開(kāi)啟Docker Remote API

1豁状、編輯 /lib/systemd/system/docker.service,在ExecStart后開(kāi)啟捉偏。

vim  /lib/systemd/system/docker.service 

找到 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 后面添加-H tcp://0.0.0.0:2375

。泻红。夭禽。。谊路。

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always

讹躯。。缠劝。潮梯。。

2惨恭、重新加載配置文件

systemctl daemon-reload 
systemctl restart docker

3酷麦、關(guān)閉防火墻 或者 開(kāi)啟防火墻的端口

centos 開(kāi)啟防火墻端口:

#關(guān)閉防火墻  
systemctl stop firewalld.service 
# 禁止firewall開(kāi)機(jī)啟動(dòng) 
systemctl disable firewalld.service 

# 或者允許固定端口
firewall-cmd --zone=public --add-port=2375/tcp --permanent 
firewall-cmd --reload

ubantu 關(guān)閉防火墻

#關(guān)閉防火墻
sudo ufw disable
# 或者允許固定端口
sudo ufw allow 2375

#查看防火墻狀態(tài)
sudo ufw status



以下正文開(kāi)始...

Docker環(huán)境下安裝Jenkins

本文自動(dòng)拉取到的jenkins為Jenkins 2.249.1版本(2020年9月30日)。其他版本過(guò)低的話喉恋,可能初始化Jenkins插件的時(shí)候沃饶,會(huì)報(bào)一些版本過(guò)低的錯(cuò)誤母廷。會(huì)提示你升級(jí)Jenkins版本。

1糊肤、拉取最新的Jenkins的docker鏡像

docker pull jenkins/jenkins:lts

2琴昆、 啟動(dòng)Jenkins容器

docker run -p 8080:8080 -p 50000:5000 --name jenkins \
-u root \
-v /mydata/jenkins_home:/var/jenkins_home \
-v /home/calebit/Desktop/soft/apache-maven-3.6.3:/maven/apache-maven-3.6.3 \
-v /home/calebit/Desktop/soft/jdk18/jdk1.8.0_261/:/jdk/jdk1.8.0_261 \
-v /mydata/mavenRepository:/mydata/mavenRepository \
-d jenkins/jenkins:lts

其中:
a、掛載目錄/mydata/mavenRepository為后面需要用到的 maven 倉(cāng)庫(kù)地址
b馆揉、掛載目錄/mydata/jenkins_home為 jenkins 安裝配置文件地址
c业舍、掛載目錄/home/calebit/Desktop/soft/apache-maven-3.6.3 需提前下載好本地maven解壓到宿主機(jī)/home/calebit/Desktop/soft/apache-maven-3.6.3目錄
d、掛載目錄/home/calebit/Desktop/soft/jdk18/jdk1.8.0_261/為 宿主機(jī)本地jdk目錄升酣。需提前下載解壓到該目錄

3舷暮、查看 jenkins初始密碼(第一次訪問(wèn)jenkins需要用到這個(gè)管理員密碼)

docker logs jenkins
## 本次測(cè)試,日志中的初始密碼為:85d429ac39ee468e9d9d92776ee7c47f

配置jenkins

參考:https://mp.weixin.qq.com/s?__biz=MzU1Nzg4NjgyMw==&mid=2247484270&idx=1&sn=92bc35f7568e061059e58af919e75bde&scene=21#wechat_redirect

1噩茄、訪問(wèn) htttp://192.168.23.135:8080

 Please wait while Jenkins is getting ready to work ...
  Your browser will reload automatically when Jenkins is ready.

等待啟動(dòng)完成下面,會(huì)提示輸入管理員密碼。此密碼通過(guò)以下命令查看绩聘。

docker logs jenkins 

2沥割、輸入日志里面獲取的管理員密碼:85d429ac39ee468e9d9d92776ee7c47f

3、首次進(jìn)入jenkins需要下載推薦插件凿菩,點(diǎn)擊左邊第一項(xiàng)【安裝推薦的插件】等待過(guò)程有點(diǎn)長(zhǎng)机杜,請(qǐng)耐心等待...
等待插件下載完成后,進(jìn)入下一步衅谷。

4椒拗、創(chuàng)建一個(gè)管理員賬號(hào) admin / admin..

5、輸入實(shí)例配置url:htttp://192.168.23.135:8080

6获黔、配置【全局工具配置】
【首頁(yè)】-【系統(tǒng)管理】-【全局工具配置】-【JDK】-【jdk安裝】-【新增JDK】

JDK別名:jdk1.8
JAVA_HOME:/jdk/jdk1.8.0_261

(注意陡叠,此處若出現(xiàn) xxxx is not a directory on the Jenkins master (but perhaps it exists on some agents) 請(qǐng)確保掛載目錄是否出錯(cuò),如果出錯(cuò)肢执,請(qǐng)參考附錄內(nèi)第3條新增掛載目錄),如果正確,此處可以不用勾選[自動(dòng)安裝]

同理译红。下拉該頁(yè)面,配置 maven
【Maven】-【Maven安裝】-【新增Maven】

Maven Name:Maven3.6.3
MAVEN_HOME:/maven/apache-maven-3.6.3

配置完畢预茄,點(diǎn)擊【保存】按鈕保存。

7侦厚、安裝ssh 插件
【首頁(yè)】-【系統(tǒng)管理】-【插件管理】-【可選插件】里面搜索 和安裝 Publish Over SSHSSH plugin插件,安裝完畢耻陕,勾選重啟jenkins ,重啟即可刨沦。

8诗宣、配置【系統(tǒng)配置】

【首頁(yè)】-【系統(tǒng)管理】-【系統(tǒng)配置】-【SSH remote hosts】-[SSH sites]新增加配置ssh登陸憑證
此步驟的主要作用是jenkins 打包鏡像后,能夠遠(yuǎn)程去登陸和執(zhí)行腳本文件

Hostname:192.168.23.135(需要登陸的服務(wù)器)
Port:22(ssh登陸端口)
Credentials:登陸賬號(hào)和密碼(此處點(diǎn)擊[添加]按鈕增加一個(gè))

9想诅、配置【Publish over SSH】
【首頁(yè)】-【系統(tǒng)管理】-【系統(tǒng)配置】-【Publish over SSH】-[SSH Servers]
SSH Server Name:192.168.23.135(隨便起)
Hostname:192.168.23.135
Username:root
Remote Directory: /root
此處用密碼登陸召庞,需點(diǎn)擊【高級(jí)】按鈕岛心,勾選【Use password authentication, or use a different key】
Passphrase / Password :root

編輯完成,點(diǎn)擊【Test configuration】顯示[success]即可篮灼,否則請(qǐng)驗(yàn)證密碼

準(zhǔn)備項(xiàng)目

主備一個(gè)SpringBoot項(xiàng)目忘古,項(xiàng)目主要結(jié)構(gòu)如下:

項(xiàng)目源碼地址:https://github.com/liuxianzhong/jenkins-docker-demo

pom.xm

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

....

<!-- docker-maven-plugin -->
<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>1.0.0</version>
    <executions>
        <execution>
            <id>build-image</id>
            <phase>package</phase>
            <goals>
                <goal>build</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <imageName>docker-demo/${project.artifactId}:${project.version}</imageName>
        <dockerHost>http://192.168.23.135:2375</dockerHost>
        <baseImage>java:8</baseImage>
        <entryPoint>["java", "-jar","/${project.build.finalName}.jar"]
        </entryPoint>
        <resources>
            <resource>
                <targetPath>/</targetPath>
                <directory>${project.build.directory}</directory>
                <include>${project.build.finalName}.jar</include>
            </resource>
        </resources>
    </configuration>
</plugin>

 

根據(jù)自己的IP更改 <dockerHost>http://192.168.23.135:2375</dockerHost> 這個(gè)IP

DockerController.java

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DockerController {
    static Log log = LogFactory.getLog(DockerController.class);

    @RequestMapping("/")
    public String index() {
        log.info("Hello Jenkins Docker!");
        return "Hello Jenkins Docker!";
    }

}

配置啟動(dòng)腳本:

新增 jenkins啟動(dòng)容器的腳本文件 jenkins-docker-demo.sh,到 /mydata/sh/目錄下

mkdir -p /mydata/sh/
cd /mydata/sh/
vim jenkins-docker-demo.sh

加入以下內(nèi)容诅诱,并且保存

#!/usr/bin/env bash
app_name='jenkins-docker-demo'
docker stop ${app_name}

echo ----stop container success ----
docker rm ${app_name}

echo ----rm container success ----

echo ----clear old images... -----

clearImagesList=$(docker images -f "dangling=true" -q)

if [ ! -n "$clearImagesList" ]; then
    echo "no images need  clean up."
else
    docker rmi $(docker images -f "dangling=true" -q)
    echo "clear old images success"
fi

docker run -p 8990:8990 --name ${app_name} \
-v /etc/localtime:/etc/localtime \
-v /home/developer/app/logs/:/home/developer/app/logs/ \
-d docker-demo/${app_name}:1.0.0

echo ----start container success----

該腳本的主要功能是髓堪,自動(dòng)啟動(dòng) 我們的鏡像。

需要賦予jenkins-docker-demo.sh腳本 可執(zhí)行權(quán)限(很重要娘荡!干旁,否則SpringBoot能打包上傳成鏡像,但可能啟動(dòng)不了容器):

chmod +x ./jenkins-docker-demo.sh

為了順利啟動(dòng)Jenkins炮沐,(可能啟動(dòng)Jenkin時(shí)報(bào)錯(cuò)如下)(很重要争群!,否則可能啟動(dòng)不了容器):

touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log’: Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?

這里是沒(méi)有權(quán)限問(wèn)題央拖,需要執(zhí)行:sudo chown -R 1000:1000 /mydata/jenkins_home

Jenkins新建項(xiàng)目

【首頁(yè)】-【新建任務(wù)】-[輸入一個(gè)任務(wù)名稱] 下面輸入:jenkins-docker-demo , 選擇【構(gòu)建一個(gè)自由風(fēng)格的軟件項(xiàng)目】后點(diǎn)擊【確定】

[源碼管理]-[git]:
Repositories:
Repository URL: https://github.com/liuxianzhong/jenkins-docker-demo.git (筆者可以自己搭建gitlab或者克隆該項(xiàng)目到自己的git倉(cāng)庫(kù))
Credentials: (點(diǎn)擊[添加]按鈕添加自己的git登陸賬號(hào)和密碼)

【構(gòu)建】-【增加構(gòu)建步驟】-【調(diào)用頂層Maven目標(biāo)】

Maven 版本:Maven3.6.3(此處下拉選擇之前配置的Maven3.6.3)
目標(biāo):package clean

【構(gòu)建】-【增加構(gòu)建步驟】-【Execute shell script on remote host using ssh】
SSH site: 下拉選擇之前配置的 root@192.168.23.135
Command:/mydata/sh/jenkins-docker-demo.sh(執(zhí)行腳本路徑)

構(gòu)建

【首頁(yè)】-【我的視圖】-【jenkins-docker-demo】-【立即構(gòu)建】
查看- [控制臺(tái)輸出] 內(nèi)日志祭阀,提示

Successfully built 53900b85314d
Successfully tagged docker-demo/jenkins-docker-demo:1.0.0
[INFO] Built docker-demo/jenkins-docker-demo:1.0.0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  30.265 s
[INFO] Finished at: 2020-09-30T02:28:07Z
[INFO] ------------------------------------------------------------------------
[SSH] script:

/mydata/sh/jenkins-docker-demo.sh

[SSH] executing...
Error response from daemon: No such container: jenkins-docker-demo
Error: No such container: jenkins-docker-demo
----stop container success ----
----rm container success ----
----clear old images... -----
no images need  clean up.
50d4402203ef2041a80ad943183113cd9b357f558c1118bdf9044203e8721549
----start container success----

[SSH] completed
[SSH] exit-status: 0

Finished: SUCCESS

訪問(wèn)

訪問(wèn) http://192.168.23.135:8990/
如果返回:

Hello Jenkins Docker!

則整個(gè)部署成功!鲜戒!

后記:

一专控、本文章僅供學(xué)習(xí)之用,生產(chǎn)環(huán)境強(qiáng)烈不建議把jenkins部署成docker容器遏餐。

二伦腐、githup地址:https://github.com/liuxianzhong/jenkins-docker-demo

三、 動(dòng)態(tài)添加掛載目錄 到固定的容器id

此處演示把本地的/mydata/mavenRepository目錄失都,掛載到j(luò)enkins容器的/mydata/mavenRepository
1柏蘑、查詢到 容器ID

docker ps -a 
#記錄 containerID

2、停止docker

systemctl stop docker

3粹庞、編輯容器文件hostconfig.json

cd /var/lib/docker/containers/容器id
cp hostconfig.json hostconfig.json_bak
vim hostconfig.json

添加以下內(nèi)容到節(jié)點(diǎn)Binds:[]

,"/mydata/mavenRepository:/mydata/mavenRepository"

:前為宿主機(jī)目錄咳焚,:后為容器目錄。

4庞溜、編輯容器文件config.v2.json

cp config.v2.json config.v2.json_bak
vim config.v2.json

添加以下內(nèi)容到節(jié)點(diǎn)MountPoints:[]內(nèi)(最好是格式化成一行革半,此處是為了好編輯)

,"/mydata/mavenRepository":{
    "Source": "/mydata/mavenRepository",
    "Destination": "/mydata/mavenRepository",
    "RW": true,
    "Name": "",
    "Driver": "",
    "Type": "bind",
    "Propagation": "rprivate",
    "Spec": {
        "Type": "bind",
        "Source": "/mydata/mavenRepository",
        "Target": "/mydata/mavenRepository"
    },
    "SkipMountpointCreation": false
}

5、重啟docker

systemctl start docker

四、原文參考地址:

1、 https://mp.weixin.qq.com/s?__biz=MzU1Nzg4NjgyMw==&mid=2247484270&idx=1&sn=92bc35f7568e061059e58af919e75bde&scene=21#wechat_redirect

五允坚、對(duì)于自動(dòng)化運(yùn)維的東西還很多,目前主流的有K8s + Rancher + Jenkins/Jib的Idea插件+ Harbor + Git/GitLab(webhook:參考https://blog.csdn.net/qq_21768483/article/details/80177920)等等六敬,學(xué)無(wú)止境。希望本文對(duì)正在學(xué)習(xí)的你有一點(diǎn)點(diǎn)幫助驾荣。

六外构、重復(fù)造輪子的工作毫無(wú)意義普泡,站在巨人的肩膀上能讓人看得更遠(yuǎn),我們能做的就是學(xué)習(xí)典勇、學(xué)習(xí)劫哼、再學(xué)習(xí)!來(lái)割笙,干了這碗雞湯Hㄉ铡!














最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末伤溉,一起剝皮案震驚了整個(gè)濱河市般码,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌乱顾,老刑警劉巖板祝,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異走净,居然都是意外死亡券时,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)伏伯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)橘洞,“玉大人,你說(shuō)我怎么就攤上這事说搅≌ㄔ妫” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵弄唧,是天一觀的道長(zhǎng)适肠。 經(jīng)常有香客問(wèn)我,道長(zhǎng)候引,這世上最難降的妖魔是什么侯养? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮澄干,結(jié)果婚禮上逛揩,老公的妹妹穿的比我還像新娘。我一直安慰自己傻寂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布携兵。 她就那樣靜靜地躺著疾掰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪徐紧。 梳的紋絲不亂的頭發(fā)上静檬,一...
    開(kāi)封第一講書(shū)人閱讀 51,554評(píng)論 1 305
  • 那天炭懊,我揣著相機(jī)與錄音,去河邊找鬼拂檩。 笑死侮腹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的稻励。 我是一名探鬼主播父阻,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼望抽!你這毒婦竟也來(lái)了加矛?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤煤篙,失蹤者是張志新(化名)和其女友劉穎斟览,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體辑奈,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡苛茂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鸠窗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妓羊。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖塌鸯,靈堂內(nèi)的尸體忽然破棺而出侍瑟,到底是詐尸還是另有隱情,我是刑警寧澤丙猬,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布涨颜,位于F島的核電站,受9級(jí)特大地震影響茧球,放射性物質(zhì)發(fā)生泄漏庭瑰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一抢埋、第九天 我趴在偏房一處隱蔽的房頂上張望弹灭。 院中可真熱鬧,春花似錦揪垄、人聲如沸穷吮。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)捡鱼。三九已至,卻和暖如春酷愧,著一層夾襖步出監(jiān)牢的瞬間驾诈,已是汗流浹背缠诅。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留乍迄,地道東北人管引。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像闯两,于是被迫代替她去往敵國(guó)和親褥伴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355