在 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 构建完成后部署到应用服务器进行访问
整个流程是这样子的:
-
git push
代码到gitlab
指定的分支, 比如master
分支,gitlab
配置了master
分支出发jenkins
的web hook
-
jenkins
被触发之后, 利用配置的gitlab
账号从gitlab
克隆代码下来, 构建代码形成安装包, 比如demo.jar
-
jenkins
将demo.jar
发送到目标服务器, 执行配置的shell
脚本, 从这里结束
前置工作: 配置免密登陆
免密登陆是说我 192.168.56.102
的机器 ssh
到 192.168.56.103
的机器不需要密码, 同理ssh
到其他机器也一样
方法1:(使用 scp-copy-id 工具)
- 检查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 ~]#
- 使用 scp-copy-id 工具拷贝公钥到目标服务器:
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.56.103
- 尝试免密登陆操作:从 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 ~]#
- 直接登陆成功, 命令行的前缀已经发生改变
方法2:
如果机器本身没有 scp-copy-id 工具, 也可以使用方法2
- 检查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
- 将生成的 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/
- 进入到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]#
- 尝试免密登陆操作:从 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 对 三台服务器实行操作, 实现的最终目标是三台服务器都能够互相免密登陆
前置准备完成, 接着需要安装 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
配置, 是在 jenkins
从 gitlab
拉取到代码之后, 在应用服务器进行构建的配置, 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
从 gitlab 中克隆项目下来, 修改之后重新 push 上去, 触发 jenkins 构建:
到此整个流程结束
=最后=
各位朋友们, 内容我会持续更新, 目前还是很浅显的.
如果有什么问题可以直接评论, 给我一些意见哈, 谢谢大家!!!