gitlab-jenkins可持续集成构建部署(超详细图文教程!)

在 jenkins 中安装 gitlab 插件

准备工作

  • 应用服务器 (ip地址: 192.168.56.102), 需要安装jdk

  • jenkins 服务器 (ip地址: 192.168.56.103), 需要安装 jdk, git, maven

  • gitlab 服务器 (ip地址: 192.168.56.104), docker 的 gitlab 开箱即用就行了

我们需要实现的是:

1. 代码 push 到 gitlab

2. gitlab 触发 jenkins 进行构建

3. jenkins 构建完成后部署到应用服务器进行访问

整个流程是这样子的:

  1. git push 代码到gitlab指定的分支, 比如 master 分支, gitlab配置了master分支出发jenkinsweb hook
  2. jenkins被触发之后, 利用配置的gitlab账号从gitlab克隆代码下来, 构建代码形成安装包, 比如 demo.jar
  3. jenkinsdemo.jar 发送到目标服务器, 执行配置的shell脚本, 从这里结束

前置工作: 配置免密登陆

免密登陆是说我 192.168.56.102 的机器 ssh192.168.56.103 的机器不需要密码, 同理ssh到其他机器也一样

方法1:(使用 scp-copy-id 工具)

  1. 检查ssh key 是否存在, 如果不存在则生成:

在 192.168.56.102机器下面:

这里是 192.168.56.102
这里是 192.168.56.102
这里是 192.168.56.102
重要的事情说三遍!!!

[root@VM ~]# clear
[root@VM ~]# ls ~/.ssh
authorized_keys
[root@ ~]# ssh-keygen -t rsa -C "your_email@example.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:B+krorvFeSo6MJv6XKPnU76xUpVluMfzW/BqPiOG4+8 your_email@example.com
The key's randomart image is:
+---[RSA 2048]----+
|         .       |
|        ..o      |
|        o*       |
|       .+.+ .    |
|       .S..o o   |
|o  . .o  o  . o  |
|.+  B++ ..   +   |
|+..=+=.+o o *    |
|++B*oooo.=E+.o   |
+----[SHA256]-----+
[root@VM ~]# ls ~/.ssh
authorized_keys  id_rsa  id_rsa.pub
[root@VM ~]#
  1. 使用 scp-copy-id 工具拷贝公钥到目标服务器:
 ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.56.103
  1. 尝试免密登陆操作:从 192.168.56.102 免密登陆到 192.168.56.103
这里是 192.168.56.102
这里是 192.168.56.102
这里是 192.168.56.102
重要的事情说三遍!!!

[root@master ~]# ssh root@192.168.56.103
Last login: Tue Aug 27 09:58:44 2019 from 192.168.56.1
[root@worker3 ~]# 
  1. 直接登陆成功, 命令行的前缀已经发生改变

方法2:
如果机器本身没有 scp-copy-id 工具, 也可以使用方法2

  1. 检查ssh key 是否存在, 如果不存在则生成:

在 192.168.56.102机器下面:

这里是 192.168.56.102
这里是 192.168.56.102
这里是 192.168.56.102
重要的事情说三遍!!!

[root@VM ~]# clear
[root@VM ~]# ls ~/.ssh
authorized_keys
[root@ ~]# ssh-keygen -t rsa -C "your_email@example.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:B+krorvFeSo6MJv6XKPnU76xUpVluMfzW/BqPiOG4+8 your_email@example.com
The key's randomart image is:
+---[RSA 2048]----+
|         .       |
|        ..o      |
|        o*       |
|       .+.+ .    |
|       .S..o o   |
|o  . .o  o  . o  |
|.+  B++ ..   +   |
|+..=+=.+o o *    |
|++B*oooo.=E+.o   |
+----[SHA256]-----+

[root@VM ~]# ls ~/.ssh
authorized_keys  id_rsa  id_rsa.pub
[root@VM ~]#
[root@VM ~]# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 
[root@VM ~]# cat ~/.ssh/authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDIwLHUiamVN/hL3lYOU4CXKPgDhR/H1Tlc9Nj5R49WnedjXhESqiK4PH0l/YChYn2nx8a7GUaywrpb0TINWm0D4AKOrs494Npk7t9z6S1uooVrfJC9UWJocSQUioHYayQmuQdZI2UxqoyYw+OLE4BB6D8inYGdKDcjaZ+e+mSNCM5iO94PzDDiW+Yr6WVwBl+WeH6cD1m+7vhNzRa+XquElJBuWxFgKCr6dH8HjrxAk67WdY12L+5UTx50Cji3A3+rStL11Z0cEL9j//Z2NA6LKr7ozsZJ2BV1yBSmLMYc4+Qtvx32jZIqhzFbLk2al9wP0B2ZrOjL0Zg0BXSW9kgj your_email@example.com
  1. 将生成的 authorized_keys 拷贝到需要登陆的机器上面, 这里举例 192.168.56.103
这里是 192.168.56.102
这里是 192.168.56.102
这里是 192.168.56.102
重要的事情说三遍!!!

[root@VM ~]# scp ~/.ssh/authorized_keys root@192.168.56.103:~/.ssh/
  1. 进入到192.168.56.103机器查看内容
这里是 192.168.56.103
这里是 192.168.56.103
这里是 192.168.56.103
重要的事情说三遍!!!

[root@worker3 ~]# cd ~/.ssh/
[root@worker3 .ssh]# ls
authorized_keys  id_rsa  id_rsa.pub  known_hosts
[root@worker3 .ssh]# chmod 600 authorized_keys
[root@worker3 .ssh]#

  1. 尝试免密登陆操作:从 192.168.56.102 免密登陆到 192.168.56.103
这里是 192.168.56.102
这里是 192.168.56.102
这里是 192.168.56.102
重要的事情说三遍!!!

[root@master ~]# ssh root@192.168.56.103
Last login: Tue Aug 27 09:58:44 2019 from 192.168.56.1
[root@worker3 ~]# 
  1. 直接登陆成功, 命令行的前缀已经发生改变

同理将上述方法1或者方法2 对 三台服务器实行操作, 实现的最终目标是三台服务器都能够互相免密登陆


前置准备完成, 接着需要安装 gitlab 的相关插件: Gitlab Hook Plugin , GitLab Plugin, Publish over SSH, Maven Integration

  • 安装 gitlab hook plugin 和 GitLab Plugin 是为了配置gitlab web hook , 克隆代码的时候使用

  • 安装 Publish over SSH 是为了后面拉取代码构建出程序包之后, 要发送到应用服务器部署运行

  • 安装 Maven Integration 插件是因为咱们部署的是一个 Maven 项目, 所以需要这个插件, 如果不是为了构建 Maven 项目, 可以不用安装这个插件




在 gitlab 中, 根据你的账号生成token




在 jenkins 中配置 gitlab 信息





配置当jenkins构建好应用后要发送到哪一台服务器运行

回到jenkins
选择: 系统管理 --> 系统设置
下拉到 Publish over SSH 内容页(如果没有安装 Publish over SSH 插件, 则在系统设置里面是没有Publish over SSH这个内容的)


以上配置完成之后, 开始创建咱们的第一个maven项目构建

创建一个maven项目




小插曲: 这里是向 gitlab 中添加 jenkins 服务器的 ssh key






下面的 SSH 配置, 是在 jenkinsgitlab 拉取到代码之后, 在应用服务器进行构建的配置, Name 是我们jenkins 系统配置的 Publish over SSH 已经配置好的内容

start.sh需要的目录结构如下


[root@master ~]# tree -L 2
.
├── anaconda-ks.cfg
├── app
│   └── backup
├── Jenkins-in
│   └── start.sh

start.sh


DATE=$(date +%Y%m%d)
export JAVA_HOME PATH CLASSPATH
JAVA_HOME=/usr/local/java/jdk1.8.0_172
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
DIR=/root/app/
JARFILE=demo-0.0.1-SNAPSHOT.jar
if [ ! -d $DIR/backup ];then
   mkdir -p $DIR/backup
fi
cd $DIR
ps -ef | grep demo-0.0.1-SNAPSHOT.jar | grep -v grep | awk '{print $2}' | xargs kill -9
mv $JARFILE backup/$JARFILE$DATE
mv -f /root/Jenkins-in/$JARFILE .
BUILD_ID=dontKillMe nohup java -jar $JARFILE >/dev/null  &
sleep 1
echo "Execute shell Finish"



下面是 gitlab 服务器的配置

这里创建一个即将进行构建的测试项目


给项目代码配置 web hook


注意: 这里, 因为我开了多台虚拟机本地进行配置的, gitlab 这里默认是无法使用 web hook 进行本地的访问的, 需要进行一下配置, 可以看下面的一张图


设置 gitlab 可以进行本地的 web hook


生成 web hook


12.png

从 gitlab 中克隆项目下来, 修改之后重新 push 上去, 触发 jenkins 构建:


到此整个流程结束

=最后=

各位朋友们, 内容我会持续更新, 目前还是很浅显的.

如果有什么问题可以直接评论, 给我一些意见哈, 谢谢大家!!!

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

推荐阅读更多精彩内容