Docker+Jenkins持续集成环境(1)使用Docker搭建Jenkins+Docker持续集成环境
<p>本文介绍如何通过Jenkins的docker镜像从零开始构建一个基于docker镜像的持续集成环境,包含自动化构建、发布到仓库\并部署上线。</p><h2 id="0-前置条件">0. 前置条件</h2>
<p>服务器安装docker,并启动docker swarm</p>
<p>注意docker启动时,需要开启tcp端口</p>
<h2 id="1jenkins-安装">1.Jenkins 安装</h2>
<h3 id="11-命令行启动">1.1 命令行启动:</h3>
<p>安装比较简单,直接运行</p>
<pre><code>docker run -p 8080:8080 -p 50000:50000 -d-v /home/jenkins-home-docker:/var/jenkins_homejenkins/jenkins:lts
</code></pre>
<p>运行后查看日志,获取token,打开ip:8080,输入token,安装常用插件</p>
<h3 id="12-使用swarm集群管理工具">1.2 使用swarm集群管理工具</h3>
<p>在services里,添加服务</p>
<p><img src="https://raw.githubusercontent.com/jadepeng/blogpic/master/pic/2018/1515649944861.jpg" alt="enter description here" title="1515649944861" loading="lazy"></p>
<h2 id="2jenkins-插件安装">2.Jenkins 插件安装</h2>
<p>我们需要一些插件支持</p>
<ul>
<li>Docker plugin: 提供docker 构建和发布</li>
<li>SSH plugin : 提供通过SSH在远程主机执行命令,用于部署服务</li>
<li>maven plugin: 支持maven</li>
</ul>
<p>系统管理-插件管理里进行安装即可。</p>
<h3 id="21-docker-配置">2.1 docker 配置</h3>
<p>“系统管理-系统设置-云” 里新增<br>
<img src="https://raw.githubusercontent.com/jadepeng/blogpic/master/pic/2018/1515650348141.jpg" alt="enter description here" title="1515650348141" loading="lazy"></p>
<p>注意docker host url需要加上tcp://</p>
<h3 id="22-ssh主机-配置">2.2 ssh主机 配置</h3>
<p>“系统管理-系统设置-SSH remote hosts” 里配置SSH远程主机</p>
<p><img src="https://raw.githubusercontent.com/jadepeng/blogpic/master/pic/2018/1515650411969.jpg" alt="enter description here" title="1515650411969" loading="lazy"></p>
<h3 id="23-配置下email">2.3 配置下email</h3>
<p>在系统设置里直接设置,配置下smtp</p>
<h3 id="24-配置jdkmaven">2.4 配置jdk、maven</h3>
<p>在系统管理-全局工具配置里设置JDK自动安装</p>
<p><img src="https://raw.githubusercontent.com/jadepeng/blogpic/master/pic/2018/1515651345001.jpg" alt="enter description here" title="1515651345001" loading="lazy"></p>
<p>maven同样配置即可</p>
<h2 id="3jenkins-项目配置">3.Jenkins 项目配置</h2>
<h3 id="31-新建项目">3.1 新建项目</h3>
<p>我们是maven项目,选择maven</p>
<p><img src="https://raw.githubusercontent.com/jadepeng/blogpic/master/pic/2018/1515650242156.jpg" alt="enter description here" title="1515650242156" loading="lazy"></p>
<h3 id="32-配置源码管理">3.2 配置源码管理</h3>
<p>首先配置源码,可以是git或者svn,项目组用的是svn</p>
<p><img src="https://raw.githubusercontent.com/jadepeng/blogpic/master/pic/2018/1515650530093.jpg" alt="enter description here" title="1515650530093" loading="lazy"></p>
<h3 id="33-配置触发器">3.3 配置触发器</h3>
<p>配置自动构建,勾选POLL SCM,配置5分钟检查一次,当svn发生变化时,会自动启动构建</p>
<p><img src="https://raw.githubusercontent.com/jadepeng/blogpic/master/pic/2018/1515650560922.jpg" alt="enter description here" title="1515650560922" loading="lazy"></p>
<h3 id="34-配置build">3.4 配置Build</h3>
<p>简单的maven项目,构建使用pom.xml,执行package -DskipTests</p>
<p><img src="https://raw.githubusercontent.com/jadepeng/blogpic/master/pic/2018/1515650633147.jpg" alt="enter description here" title="1515650633147" loading="lazy"></p>
<h3 id="35-配置post-steps">3.5 配置Post Steps</h3>
<p>Post Steps是指构建完成执行的步骤,我们会实现构建docker,发布docker和部署服务</p>
<h4 id="351-配置docker">3.5.1 配置docker</h4>
<p>点击add post-build step,选择Build/publish docker image:</p>
<p><img src="https://raw.githubusercontent.com/jadepeng/blogpic/master/pic/2018/1515650728666.jpg" alt="enter description here" title="1515650728666" loading="lazy"></p>
<p>选择cloud为先前配置的docker-cloud,image填写私服发布地址,勾上push image。</p>
<p><img src="https://raw.githubusercontent.com/jadepeng/blogpic/master/pic/2018/1515650821470.jpg" alt="enter description here" title="1515650821470" loading="lazy"></p>
<p>这样配置,构建完成后会自动push到私服。</p>
<h4 id="352-配置远程部署">3.5.2 配置远程部署</h4>
<p>我们使用docker stack来部署服务</p>
<p>首先,编写docker-compose.yml</p>
<pre><code>version: "3"
services:
backend:
image: 192.168.86.8:5000/allinone-service-cicd
deploy:
replicas: 1
restart_policy:
condition: on-failure
ports:
- "8007:8006"
networks:
- webnet
networks:
webnet:
</code></pre>
<p>保存到docker服务器,比如/root/allinone/allinone-service/allinone目录</p>
<p>然后,添加post-build step:</p>
<p><img src="https://raw.githubusercontent.com/jadepeng/blogpic/master/pic/2018/1515651009633.jpg" alt="enter description here" title="1515651009633" loading="lazy"></p>
<p>选择配置好的远程docker主机:</p>
<p><img src="https://raw.githubusercontent.com/jadepeng/blogpic/master/pic/2018/1515651028618.jpg" alt="enter description here" title="1515651028618" loading="lazy"></p>
<p>填入命令:</p>
<pre><code>cd /root/allinone/allinone-service/allinone
docker stack down allinone-cicd
docker stack deploy -c docker-compose.yml allinone-cicd
</code></pre>
<ul>
<li>docker stack down 将原先服务下线</li>
<li>docker stack deploy -c 重新部署服务</li>
</ul>
<h2 id="4-开始构建">4 开始构建</h2>
<h3 id="41-手动构建">4.1 手动构建</h3>
<p>回到工程,点击立即构建,第一次构建会自动下载jdk,maven,会比较慢</p>
<p><img src="https://raw.githubusercontent.com/jadepeng/blogpic/master/pic/2018/1515651404468.jpg" alt="enter description here" title="1515651404468" loading="lazy"></p>
<p>等待一会,构建成功:</p>
<pre><code>9e70992ebc17: Pushing [===============================================> ]42.66MB/45.02MB
9e70992ebc17: Pushing [=================================================> ]44.96MB/45.02MB
9e70992ebc17: Pushing [==================================================>]45.02MB
9e70992ebc17: Pushed
latest: digest: sha256:5df6c97d6173527bc92ddc436fcef063069cd1cd3d0da8a0c74d2238443ae4d6 size: 1582
Docker Build Done
script:
cd /root/allinone/allinone-service/allinone
docker stack down allinone-cicd
docker stack deploy -c docker-compose.yml allinone-cicd
executing...
Removing service allinone-cicd_backend
Removing network allinone-cicd_webnet
Creating network allinone-cicd_webnet
Creating service allinone-cicd_backend
completed
exit-status: 0
Finished: SUCCESS
</code></pre>
<p>如果配置了邮件通知,会收到构建成功邮件。</p>
<h3 id="42-自动构建">4.2 自动构建</h3>
<p>SVN提交一个变更,等几分钟,查看Subversion Polling Log,已经有记录了,发现已经自动构建了一个版本</p>
<p><img src="https://raw.githubusercontent.com/jadepeng/blogpic/master/pic/2018/1515651769484.jpg" alt="enter description here" title="1515651769484" loading="lazy"></p>
<p>完美!</p>
<hr>
<blockquote>
<p>作者:Jadepeng<br>
出处:jqpeng的技术记事本--http://www.cnblogs.com/xiaoqi<br>
您的支持是对博主最大的鼓励,感谢您的认真阅读。<br>
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。</p>
</blockquote>
</div>
<div id="MySignature" role="contentinfo"><br><br>
来源:https://www.cnblogs.com/xiaoqi/p/docker-jenkins-cicd.html
頁:
[1]