1 | docker restart gitlab |
通过浏览器访问,默认账号root, 需要设置一个新密码。
访问报502说明容器还没启动完成,等待片刻即可访问到如下页面。
至此,Gitlab搭建完成。
1 | docker pull jenkins/jenkins:lts |
由于防止jenkins中重要文件因为容器损毁或删除导致文件丢失,因此创建文件对外挂载。
1 | mkdir -p /apps/Devops/jenkins |
并且需要对目录开放docker进程操作的完全读写的权限
1 | chmod 777 /apps/Devops/jenkins |
1 | docker run -itd -p 9980:8080 -p 50000:50000 --restart always -v /apps/Devops/jenkins:/var/jenkins_home --name jenkins jenkins/jenkins:lts |
-p 端口映射:Jenkins是Java程序,默认端口是8080
访问地址:http://192.168.137.119:9980/
出现如上页面,代表jenkins启动成功。
执行以下命令:
1 | docker logs -f jenkins |
复制下图中红框内的初始密码。
当然,你也可以不通过日志查看,你可以进入黄色框中描述的文件查看初始密码也是一样的,二选一。
通过描述文件查看密码:
1 | # 1. 进入运行的jenkins容器中。 |
将密码复制、粘贴到如下框框中,进入jenkins,需要等待数十秒(可能更久)!
如果出现下图情况,等很久,还没有进入:
解决方案:
(1)进入我们前面挂载的Jenkins目录 /apps/Devops/jenkins
,修改文件 hudson.model.UpdateCenter.xml
。
1 | cd /apps/Devops/jenkins |
(2)将文件 hudson.model.UpdateCenter.xml
中 https://updates.jenkins.io/update-center.json
改成 http://updates.jenkins.io/update-center.json
(把https改成http)。
(3)保存,重启Jenkins容器
1 | docker restart jenkins |
(4)重新进入Jenkins管理页面:http://192.168.137.119:9980/
(稍等一会儿,就可以进入)
如下图所示,左侧显示安装建议的插件。右侧选择自定义安装插件。
先按照建议插件进行安装,点击左侧即可。
如果全部都能正确安装,更好。出现安装失败的插件,等待所有结束,下方会有Retry可以进行重试。
最后重试后,依旧没有安装成功的,可以先continue,完成初始化的步骤。随后参考这篇文章解决。
安装完成后会自动出现如下界面:
将信息输入对应输入框内,点击保存并完成,之后的步骤默认点击保存并完成即可。
出现下图代表成功安装Jenkins:
安装成功之后重启一下jenkins容器:
1 | docker restart jenkins |
点击 Manage Jenkins(系统管理) ——> Script Console(脚本命令行)
输入脚本并运行:
1 | System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai') |
如图显示Result表示成功:
所需插件:Maven Integration
、Pipeline Maven Integration
、Gitlab
、Gitlab hook
、SSH
、Publish Over SSH
、Docker
点击 Manage Jenkins(系统管理) ——> Manage Plugins(插件管理)
点击可选插件 ——> 过滤Maven Integration插件 ——> 勾选Maven Integration和Pipeline Maven Integration ——> 点击直接安装
如图开始安装插件:
安装完成后,即可在插件管理下的已安装选项卡下看到刚刚已经安装的插件。
点击可选插件 ——> 过滤Gitlab插件 ——> 勾选Gitlab和Gitlab Hook ——> 点击直接安装
安装Publish Over SSH插件的原因:因为本方式是使用docker启动jenkins服务,所以在jenkins后续执行构建任务时候,需要在build成功后,将服务的jar包(以spring boot)服务为例,需要将jar包拷贝到Dockerfile所在服务器的指定目录,进行微服务的启动;所以,此处需要配置SSH服务器的连接,意思就是在jenkins的任务结束后,去执行指定的服务器上的shell命令,做spring boot或cloud服务的镜像的构建,容器的运行,等一系列的事情。
点击可选插件 ——> 过滤SSH插件 ——> 勾选SSH和Publish Over SSH ——> 点击直接安装
点击可选插件 ——> 过滤Docker插件 ——> 勾选Docker ——> 点击直接安装
插件全部安装完成后,可以重启一下Jenkins。
点击 Manage Jenkins(系统管理) ——> Manage Credentials(凭据管理)
点击添加凭据 ——> 输入宿主机服务器的用户名和密码等信息并保存
这个配置是干什么的呢?配置SSH连接Dockerfile所在服务器的相关信息,并添加凭证,最后测试连接并保存,以备后面使用!!!
点击 Manage Jenkins(系统管理) ——> 系统配置
找到配置 ——> 下拉选择SSH remote hosts
如下图,输入对应的信息,并校验是否连接成功!成功后,点击应用 ——> 点击保存
找到配置 ——> 下拉选择SSH remote hosts
进行相关配置即可。
由于我们要实现的是SpringBoot项目的自动化部署操作,所以需要安装JDK、Git、Maven、Docker。
可以安装多个,根据项目JDK版本需求。
输入自定义JDK名称 ——> 勾选自动安装 ——> 输入Oracle账户、密码 ——> 选择JDK版本 ——> 勾选同意协议
输入自定义Git名称 ——> 勾选自动安装
输入自定义名称 ——> 勾选自动安装 ——> 选择版本
输入自定义名称 ——> 勾选自动安装
最后,点击应用 ——> 点击保存即可。
注意:本名称一般和项目名称一致,因为本名称会在jenkins工作空间下生成目录,类似于IDEA或Eclipse的工作空间的概念。所以,一般情况下,保证本名称=项目名称=docker镜像名称=docker容器名称 这样能尽可能的减轻jenkins配置的shell命令的复杂性!(空间命名要小写:因为镜像名不允许存在大写字母)
选择构建一个Maven项目(因为是Spring Boot的服务)
输入描述信息,源码管理选择Git,从gitlab复制克隆地址粘贴到Repository URL中,没有报错就表示OK的,(注意,这里我是克隆HTTP方式的地址,如果你是克隆SSH方式的地址,你需要添加Credentials,配置一下就可以了)
接下来将会生成供gitlab配置webhook使用的URL和Token,请记录下来,后面会使用。
点击高级,拉下来找到Generate并点击,生成一串Secret Token。
前往gitlab,进入要构建的项目,在setting中选择Webhooks,输入URL和Secret Token 这两在上面图中已经给你标注了,去掉Enable SSL verification的勾选。
点击Add webhook,如图表示成功添加了webhook:
如果添加不成功解决方案请参考:解决 Url is blocked: Requests to the local network are not allowed
勾选Add timestamps to the Console Output,等下可以看到控制台打印的信息,这个根据自己的需求勾选。
配置前一步需要做的事情是:清理本项目在jenkins的workspace中的历史文件夹。
你可以不用知道WORKSPACE具体的地址在哪里,因为下方有链接可以查看到当前jenkins中有哪些可用的变量供你使用。
默认WORKSPACE地址:/var/jenkins_home/workspace
(如果你jenkins是docker启动的,并且挂载了目录在宿主机,那你在宿主机也是可以看到的,即 /apps/Devops/jenkins/workspace
)
本处选择的是执行shell,则表示本处配置的shell命令,是默认在jenkins容器中执行的,而不是在宿主机上。
下拉选择执行 shell:
在执行shell的命令中输入以下命令,设置全局变量:
1 | SERVER_NAME_1=jenkins-docker-gitlab-springboot |
注意:本处的SERVER_NAME_1=jenkins-docker-gitlab-springboot是配置项目的名称
我们是SpringBoot项目,所以用到maven,这里设置一下全局操作,clean项目,并打成jar包,所以这里输入:clean package
只在jenkins构建成功后,才执行这一步。
因为最后的构建成功的maven项目的jar包是以docker启动服务为目的,所以最后的docker操作,一定是在jenkins容器以外的服务器上运行的,可能是本机宿主机,也可能是远程的服务器,这个根据自己的情况去配置。
本处选择,在远程的SSH执行shell脚本。
选中只有构建成功才执行这些命令,然后选择Execute shell script on remote host using ssh。
1 | # ===================================================================================== |
OK,到这里基本的任务已经新建成功,至于后续的两个步骤,根据自己的需求自行配置,没有难度的。
点击应用,保存。
测试push事件触发自动化构建和部署,点击test下拉选择push events,出现HTTP 200表示OK了。
回到Jenkins可以看到任务列表,查看构建信息等。
待Jenkins构建成功之后,在服务器上执行命令:docker ps
,可以看到我们启动起来的 SpringBoot 容器:
在浏览器输入:http://服务器ip:端口/
即可访问刚自动部署的项目:
完成基于jenkins的持续集成部署后,任务构建执行完成,测试结果需要通知到相关人员(这个邮件通知根据自己需求选择添加,非必须)。
由于Jenkins自带的邮件功能比较鸡肋,因此这里推荐安装专门的邮件插件,不过下面也会顺带介绍如何配置Jenkins自带的邮件功能作用。
点击系统管理 ——> 插件管理 ——> 可选插件:
选择Email Extension Plugin插件进行安装,安装好之后重启Jenkins。
点击系统管理 ——> 系统配置,进行邮件配置:
这里的发件人邮箱地址切记要和系统管理员邮件地址保持一致(当然,也可以设置专门的发件人邮箱,不过不影响使用,根据具体情况设置即可)
1 |
|
上面的几步完成后,点击应用,保存即可。
配置内容如下,和Email Extension Plugin插件同样的配置,可以通过勾选
完成上面的系统设置后,点击应用保存即可。
在完成系统设置后,还需要给需要构建的项目进行邮件配置。
进入新建的项目界面,点击配置按钮,进入系统配置页面。
点击上方的
点击上方的Editable Email Notification
,配置内容如下:
接上图:
配置内容默认即可,邮件内容类型可以根据自己的配置选择,收件人列表可以从前面的系统设置中默认收件人选项配置。
如下图,为我收到的测试邮件,邮件内容可以通过系统设置里面进行个性化的配置,可参考我上面的模板,或者自定义即可。
(1)shell脚本中需要的文件夹没有则自建(不用完全跟我一样)。
(2)Dockerfile需和jar包放到同一目录下,附上我使用的Dockerfile文件内容:
1 | FROM jdk1.8 |
(3)如果没有基础 JDK 镜像可参照 这篇文章 完成。
(4)构建过程中可能提示没有权限操作文件夹,按照下面执行解决即可:
1 | # 1. 查看所有容器 |
经过我们多款软件的安装配置,我们逐步掌握了如何上床Spring Boot项目到Gitlab中,并使用Jenkins自动构建任务,另外依托于Docker,让这一切变得更加方便,希望大家都多多思考,让机器自动干活,减少我们IT从业人员的重复、繁琐的工作量。