docker搭建gitbook+jenkins+gitlab

前言

  • git 是一个分布式版本控制系统,我们可以在本机、Linux云主机、github等上进行对软件开发版本的控制,而且我们即使离线也是可以继续编码工作,比SVN更加方便安全。

  • github 是基于git的网页版仓库托管系统,它在版本的基础上,增加了分布式仓库、备份、评论和博客等更多功能。但是github是公开在公网的,也有类似的开源产品如gitlab和gitee。

  • gitbook 最早是为了软件开发文档编写方便的编辑器,其实和所谓git 、github没多大相似,但是它方便的编辑和美观的markdown形式,可以做很多文字内容的编辑工作, 结合git并放入github仓库,可以带来更好的写文体验。

  • jenkins 是开源的持续集成的软件,可以在编辑代码后自动部署到服务器,集成测试等,让我们的编写工作更加快捷方便。

这里只是简单了解,更具体使用可以参考各个相关项目资料

这里我们要基于gitbook、git、Jenkins搭建快捷的文档编写发布流程。废话少说,开始吧

搭建gitlab

在服务器拉取gitlab镜像,并启动

[root@master ~]# docker run --detach --hostname gitlab.bill.com --name gitlab --publish 443:443 --publish 8080:80 --publish 12222:22 --name gitlab.bill.com --restart always --volume ~/gitlab/config:/etc/gitlab --volume ~/gitlab/logs:/var/log/gitlab --volume ~/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:latest

因为部署在本地,又指定了gitlab.bill.com作为域名,所以在/etc/hosts配置下,这样可以通过域名访问gitlab。
127.0.0.1 gitlab.bill.com

初次登录可以修改密码,或者重新注册一个用户,我注册了一新用户devops,并在gitlab中创建了一个demo项目

<meta charset="utf-8">

image.png

从后台修改密码

[root@master ~]# docker exec -it gitlab.bill.com /bin/bash

root@gitlab:/# gitlab-rails console production

Loading production environment (Rails 4.2.8)

irb(main):001:0> user = User.where(id: 1).first

=> #<User id:1 @root>

irb(main):002:0> user.password=12345678

=> 12345678

irb(main):003:0> user.password_confirmation=12345678

=> 12345678

irb(main):004:0> user.save!

Enqueued ActionMailer::DeliveryJob (Job ID: ea8d4a43-05ef-4a05-819f-cafe8b9186e9) to Sidekiq(mailers) with arguments: "DeviseMailer", "password_change", "deliver_now", gid://gitlab/User/1

=> true

irb(main):005:0> quit

创建了一个空项目后,然后根据github上的提示,将本地的git项目推送到gitlab

image.png
image.png

Git global setup
git config --global user.name "devops"
git config --global user.email "459952507@qq.com"

Create a new repository
git clone http://gitlab.bill.com/devops/demo.git
cd demo
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master

在windows创建密钥 创建ssh的密钥,然后上传到gitlab


image.png
image.png

右键进入git bash


image.png

把代码复制到目录,并上传

image.png
wangyaohui@wangyaohui-HP MINGW32 /g/Projects/vuejs/demo (master)
$ git add .

wangyaohui@wangyaohui-HP MINGW32 /g/Projects/vuejs/demo (master)
$ git commit -m "demo init"
[master (root-commit) cf8eab3] demo init
 3 files changed, 40 insertions(+)
 create mode 100644 test.css
 create mode 100644 test.html
 create mode 100644 test.js
  
wangyaohui@wangyaohui-HP MINGW32 /g/Projects/vuejs/demo (master)
$ git push
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 784 bytes | 0 bytes/s, done.
Total 5 (delta 0), reused 0 (delta 0)
To http://120.24.197.36:8080/devops/demo.git
 * [new branch]      master -> master

上传完后Gitlab项目如下:


image.png

这里可以选用已有的github的项目,带有一个单元测试和集成测试
https://github.com/onedaywillcome1/ContinuousIntegrationAndContinuousDeliveryApp.git

image.png

搭建jenkins

使用docker 下载jenkins镜像 jenkinsci/jenkins,并启动

 [root@master ~]# docker run -d -p 8081:8080 -p 50000:50000 --name jenkins --link gitlab.bill.com:gitlab.bill.com -u root -v ~/jenkins:/var/jenkins_home -v /usr/local/java:/usr/local/jdk -v /usr/local/maven3:/usr/local/maven jenkinsci/jenkins:latest
7173ebd2ee9f291bafeb7a81a216e090b4a645263a4fa6faedbacd5be7ada282

8080端口是jenkins的端口,5000端口是master和slave通信端口(没错,jenkins可以部署集群,在本次中没有配置)
并将宿主机maven和jdk映射到对应的容器目录上,同时通过配置--link连接gitlab,因为要从gitlab下代码。
初次启动的时候,可以通过docker logs -f jenkins查看控制台的密码,通过这个密码登录系统,执行创建用户等操作

image.png
image.png
image.png

安装插件
启动项目后,下载所需的插件:系统管理-管理插件-可选插件(尤其要下载Git Plugin和Gitlab Hook Plugin插件以及Build Authorization Token Root Plugin),
1、点击 系统管理 :


image.png

2、点击 管理插件 :


image.png

3、点击 可选插件 选择你需要安装的插件

生成随机token:
root@278f1927ea8d:/# openssl rand -hex 12
5e97dbfdd159ff88f7b6afef

配置项目
新建一个项目,输入项目名称Books-test ,


image.png

创建项目触发器:

项目-配置-构建触发器:

得到url地址 http://www.haleyprince.com:8081/project/Books-test

image.png

然后编写设置代码发送时候自动推送的脚步,也就是简单的程序让系统自动做了些平时打包,复制上传等功能。

3、在gitlab上添加钩子
钩子就像钓鱼的钩子意思,鱼来了通知你去做拉的动作,你来了新变更行动,就会自动触发钩子然后去做通知Jenkins做推送动作。

image.png
image.png

添加成功后,点击此webhook后面的test进行测试
第一次测试webhook会报错,提示先提交一次,字面意思,就先push一次
先提交个文件

wangyaohui@wangyaohui-HP MINGW32 /g/Projects
$ git clone http://devops:87654321@120.24.197.36:8080/devops/Books-test.git
Cloning into 'Books-test'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.

wangyaohui@wangyaohui-HP MINGW32 /g/Projects
$ cd Books-test/

wangyaohui@wangyaohui-HP MINGW32 /g/Projects/Books-test (master)
$ touch README.md

wangyaohui@wangyaohui-HP MINGW32 /g/Projects/Books-test (master)
$ git add README.md

wangyaohui@wangyaohui-HP MINGW32 /g/Projects/Books-test (master)
$ git commit -m 'add readme'
[master (root-commit) aa817f1] add readme
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README.md

wangyaohui@wangyaohui-HP MINGW32 /g/Projects/Books-test (master)
$ git push http://devops:87654321@120.24.197.36:8080/devops/Books-test.git
Counting objects: 3, done.
Writing objects: 100% (3/3), 212 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To http://120.24.197.36:8080/devops/Books-test.git
 * [new branch]      master -> master

测试


image.png

系统管理 -> 系统设置 -> 去掉 Enable authentication for ‘/project’ end-point


clipboard.png
clipboard1.png

编写README.md 加入test gitbook push

wangyaohui@wangyaohui-HP MINGW32 /g/Projects/Books-test (master)
$ vim README.md

wangyaohui@wangyaohui-HP MINGW32 /g/Projects/Books-test (master)
$ git add README.md
warning: LF will be replaced by CRLF in README.md.
The file will have its original line endings in your working directory.

wangyaohui@wangyaohui-HP MINGW32 /g/Projects/Books-test (master)
$ git commit -m 'gitbook test'
[master 9c15aa5] gitbook test
 1 file changed, 1 insertion(+)

$ git push http://devops:87654321@120.24.197.36:8080/devops/Books-test.git
Counting objects: 3, done.
Writing objects: 100% (3/3), 255 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To http://120.24.197.36:8080/devops/Books-test.git
   aa817f1..9c15aa5  master -> master
clipboard2.png
clipboard3.png

配置git


clipboard4.png

再在gitlab测试
root@278f1927ea8d:/# ls /var/jenkins_home/workspace/Books-test/
README.md
现在jenkins有提交了
用nginx查看


image.png

在本机编写增加 gitbook 的SUMMARY.md 并构建gitbook
wangyaohui@wangyaohui-HP MINGW32 /g/Projects/Books-test (master)
$ gitbook build
info: 7 plugins are installed
info: 6 explicitly listed
info: loading plugin "highlight"... OK
info: loading plugin "search"... OK
info: loading plugin "lunr"... OK
info: loading plugin "sharing"... OK
info: loading plugin "fontsettings"... OK
info: loading plugin "theme-default"... OK
info: found 1 pages
info: found 0 asset files
info: >> generation finished with success in 11.6s !

wangyaohui@wangyaohui-HP MINGW32 /g/Projects/Books-test (master)
$ git add _book

wangyaohui@wangyaohui-HP MINGW32 /g/Projects/Books-test (master)
$ git add SUMMARY.md

wangyaohui@wangyaohui-HP MINGW32 /g/Projects/Books-test (master)
$ git commit -m 'build book'
[master a9b56bc] build book

wangyaohui@wangyaohui-HP MINGW32 /g/Projects/Books-test (master)
$  git push http://devops:87654321@120.24.197.36:8080/devops/Books-test.git
Counting objects: 36, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (33/33), done.
Writing objects: 100% (36/36), 624.69 KiB | 0 bytes/s, done.
Total 36 (delta 1), reused 0 (delta 0)
To http://120.24.197.36:8080/devops/Books-test.git
   9c15aa5..a9b56bc  master -> master

push后可以在网页打开了


clipboard5.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343