Jenkins+Docker自动化部署Spring boot项目 (三)搭建jenkins

搭建jenkins

jenkins我是通过下载镜像完成安装的,建议使用docker
hub的镜像,它提供的版本比较新。一开始为了图快,我用了163镜像库的jenkins镜像,它的版本比dokcer
hub低一个版本。安装好后安装插件,有个必要的插件安装不上,提示版本太低,后来换成docker hub提供的高版本镜像文件就OK了。这是官方地址
<https://hub.docker.com/_/jenkins/>

前置条件

操作系统版本:Ubuntu16
docker版本:1.13.1
私有库harbor搭建成功
spring boot项目配置好dockerfile maven插件

操作步骤

*
拉取镜像
sudo docker pull jenkins
*
构建镜像
a. 由于容器内权限问题,我们需要根据官方镜像构建一个自己的jenkins镜像。很简单,写个Dockerfile即可,内容如下:
FROM jenkins USER root RUN apt-get update && apt-get install -y sudo && rm -rf
/var/lib/apt/lists/* RUN echo "jenkins ALL=NOPASSWD: ALL" >> /etc/sudoers USER
jenkins
b. 在Dockerfile所在目录执行构建新镜像命令:
sudo docker build -t jenkins:2.0 #这里的镜像名是自己任取的
*
启动容器
sudo docker run -d --name jenkins -p 8080:8080 -p 50000:50000 -u root \ -v
/home/acmedcare/jenkins_home:/var/jenkins_home \ -v /opt/maven/apache-maven-3.2
.5:/usr/local/maven \ -v /var/run/docker.sock:/var/run/docker.sock -v
/usr/bin/docker:/usr/bin/docker\
上面的命令通过-v 将本地maven目录与Jenkins容器内目录关联,方便后面构建任务时要用到
a. 浏览器输入http:ip:8080
b. 第一次进入会让你输入初始密码,界面上会告诉你在哪个文件下,或者通过docker logs -f
jenkins容器号查看启动日志,上面也会打出初始密码。
c. 输入密码成功后选择安装默认插件,下面就跟着提示一步步走就好了。
d. 上面 步骤成功后会进入主界面,马赛克的地方是我已经建好的构建任务


*
插件安装
检查以下几个插件是否安装
Maven Integration plugin
docker-build-step
Docker plugin
Gitlab Hook Plugin
GitLab Plugin


* 全局配置
主要是配置mvn,方便后面构建任务中的脚本能调到宿主机上的mvn命令


maven目录填与宿主机maven目录关联的容器目录
*
构建任务
a.点击新建

b. general部分填项目名和项目信息

c. 源码管理,jenkins拉代码的地方
,我的代码是放在gitlab上的,所以配置git。要成功拉取远程仓库的代码,本地环境要配置git账户信息的,所以我先进入容器配置git账户信息的
sudo docker exec jenkins /binbash #jenkins是容器名 git config --global user.name
"Issac" git config --global user.email "[email protected]"
//如果配置了ssh,还需要再配置公私钥匙,这里不再详述

d. 构建触发器,可选配置项。第二个勾选项“触发远程构建”,意思是使用get请求下面说明的url,且带上token,就会触发构建。


e.Pre Steps 一般就是写打包命令,我写的是用mvn打包和打成docker镜像

f. Post
Steps,这里就是写执行脚本,脚本就是负责将打好的镜像push到私有库,远程登录部署机器,pull下来刚才的镜像,停止删除之前的容器,启动该新镜像。脚本我是直接拿的网上现成的。需要注意的是,远程登录部署机,需要在jenkins容器内配置ssh免密登录,我先贴免密登录配置,再贴脚本。
免密登录:
sudo docker exec 容器号 /bin/bash #进入容器 ssh-keygen -t rsa #会进入交互模式,一路按回车
会有文字提示生成的公私钥文件存入位置,一般在命令运行当前目录生成.ssh目录,进入该目录,至少有下面两个文件:
 id_rsa : 生成的私钥文件
 id_rsa.pub : 生成的公钥文件
下面就是将公钥内容拷到目标机器上,有两种方法,一种在当前机器通过以下命令:
ssh-copy-id -i ~/.ssh/id_rsa <romte_ip>
另一种是就是手工将本地id_rsa.pub文件的内容拷贝至远程服务器的~/.ssh/authorized_keys文件中
jenkins执行脚本:
echo '================开始推送镜像================' sudo docker login
--username=admin --password=Harbor12345 x.x.x.x:8090 #登录私有库(harbor我没有用域名) sudo
docker push x.x.x.x:8090/xxx/xxx:latest#推送镜像,镜像文件已经在前面的mvn步骤打好了 echo
'================结束推送镜像================' echo
'================开始远程启动================' ssh [email protected] -tt << remotessh
###ssh远程部署机器 ####从这里开始都是在远程机器上执行命令 cd /opt/issac ./jenkins.sh x.x.x.x:8090
/xxx/xxxsudo docker login -u admin -p Harbor12345 121.42.153.1:8090 sudo docker
pull x.x.x.x:8090/xxx/xxx:latest sudo docker run -d --name=容器名-`date +%Y-%m-%d`
-p:8882:8882 --add-host discovery0:x.x.x.x -v /tmp/logs:/logs
--network=discovery0-e x.x.x.x:8090/xxx/xxx:latest echo "finished!"
##--add-host是容器内添加一条dns,--newwork是当前容器的网络加入我已经创建好的桥接网络discovery0,我的业务系统需要的。
#####执行完毕 exit ###退出远程机器 remotessh ###结尾哦 echo
'================结束远程启动================' exit ###退出远程机器 remotessh ###结束ssh echo
'================结束远程启动================'
下面是远程部署机器上jenkins.sh的内容,网上抄来的,很简单,就是停掉和删除老容器
#!/bin/sh sudo docker stop $(sudo docker ps | grep $1|awk '{print $1}'|sed
's/%//g') sudo docker rm $(sudo docker ps -a | grep $1|awk '{print $1}'|sed
's/%//g')
点击保存后,进入主界面,进入自己刚创建的构建任务,点击构建,就会自动执行刚才配置好的内容了。

构建的时候,上图左下角会出现一个递增序号,点击进去后再点控制台,可以看到构建进度


PS:还有一种触发方式就是git push
tag触发构建,这个需要在gitlab端配置勾子,也很简单,我是因为Jenkins和部署机器各自在内外网,无法通信,所以没用这个方式。

到此,jenkins搭建配置完毕

参考:
这位大神写的很好 <https://www.cnblogs.com/bigben0123/p/7886092.html>

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信