Gitlab+Jenkins+Docker实现net core持续集成

<h2>前言</h2> <p>在项目中使用这一套自动集成的体系之后,一直想找个时间总结出来,用于自己记录也打算将自己的所得分享给园友们,不经常写文章,可能会有错误的地方,希望各位不吝指正,我会及时的改正并表示感谢,希望大家能够一起进步。</p> <h2>前期准备</h2> <p>centos7.5系统环境,关闭防火墙</p> <h3>jenkins in docker 安装</h3> <pre><code> yum install docker
1docker service start 2 3docker pull jenkins 4 5docker run -d -p 8080:8080 -p 50000:50000 \ 6 -v jenkins:/var/jenkins_home \ 7 -v /etc/localtime:/etc/localtime \ 8 --name jenkins \ 9 docker.io/jenkins/jenkins

</code></pre>

<p>-d 后台运行镜像<br> -p 80:8080 将镜像的8080端口映射到服务器的80端口<br> -p 50000:50000 将镜像的50000端口映射到服务器的50000端口<br> -v jenkins:/var/jenkins\_home 挂载卷</p> <blockquote> <p>/var/jenkins\_home目录为jenkins工作目录,我们将硬盘上的一个目录挂载到这个位置,方便后续更新镜像后继续使用原来的工作目录。该命令会将/var/lib/docker/volumes/jenkins映射到相应路径,默认的挂载卷都在docker目录下的volumes文件夹内,可以自己指定主机内的其他路径</p> </blockquote> <p>-v /etc/localtime:/etc/localtime 让容器使用和服务器同样的时间设置。<br> --name jenkins 给容器起一个别名</p> <blockquote> <p>我在创建好之后遇到了访问jenkins界面白屏的问题,重启容器问题解决,重启大法好。<br> 重启命令 <code data-backticks="1">docker service restart</code></p> </blockquote> <h2>配置jenkins</h2> <h3>Publish over SSH插件配置</h3> <p>系统管理-&gt;系统设置<br> <code data-backticks="1">Passphrase</code>:用户密码</p> <p><img id="img1562076367556" src="https://img2018.cnblogs.com/other/852411/201907/852411-20190702231329615-2044029963.png"></p> <h3>Git凭证添加</h3> <p>进入凭据-&gt;系统-&gt;全局凭据-&gt;添加<br> 添加成功后,点击Test Configuration 测试是否能够连通<br> <img id="img1562076342172" src="https://img2018.cnblogs.com/other/852411/201907/852411-20190702231329605-147292573.png"></p> <h3>新建构建任务</h3> <p><strong>源码管理</strong></p> <p>配置如下,凭证选择我们上面配置的git凭证,分支调到需要发布的分支上<br> <img id="img1562077185788" src="https://img2018.cnblogs.com/other/852411/201907/852411-20190702231329608-1680243624.png"></p> <p><strong>构建触发器</strong></p> <p>选择轮询SCM设置为<code data-backticks="1">H/2 \* \* \* \*</code>,即每两分钟检查一次是否有新的提交</p> <p><strong>构建后操作</strong></p> <p>选择<code data-backticks="1">Send files or execute commands over SSH</code>,这里我们不用这个插件进行文件传输,而是用它来执行主机中的shell脚本,配置如下</p> <p><img id="img1562076356759" src="https://img2018.cnblogs.com/other/852411/201907/852411-20190702231329614-568533613.png"><br> 脚本内容如下:</p> <pre><code>#!/bin/bash

echo '开始执行部署'

#进入jenkins的工作区 cd /var/lib/docker/volumes/jenkins/_data/workspace/test

echo '更新镜像'

echo '---------------重新构建镜像----------------------' cp testCore/Dockerfile Dockerfile #执行net core 程序的dockerfile,生成程序镜像 docker build --no-cache -t testCore:master . echo '---------------镜像构建成功----------------------'

#容器创建 docker run -d -it
-v /home/configs/testCore/appsettings.json:/app/appsettings.json
-v /etc/localtime:/etc/localtime:ro
-p 6000:80
--restart=always
--name test testCore:master

echo '部署结束' </code></pre>

<p>至此,整个构建过程就结束了,但是你在如此构建几次之后就会发现一个问题<br> <img id="img1562075349916" src="https://img2018.cnblogs.com/other/852411/201907/852411-20190702231329610-1620500217.png"></p> <p>查询了一下,导致该问题的原因是</p> <blockquote> <p>重新构建镜像的时候,该镜像正在被某容器使用中,那么在重新构建同名同版本镜像后,docker保留原来的镜像,即容器还是用原来的, 那么原来的镜像名称变成none,tag也成了none</p> </blockquote> <p>解决的办法是 在shell脚本之后添加一行删除tag为none的镜像的脚本,如下<br> <code data-backticks="3">docker images|grep none|awk '{print $3}'|xargs docker rmi</code></p> <h2>总结</h2> <p>实验的进程总不会像表面那样一番风顺,期间也会遇到各种各样的问题,我很享受那种闯过一关又一关看到成果的过程,后续更新我会将我在部署时遇到的一些小问题整理出来,作为记录学习,感谢阅读。</p>
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Gitlab+Jenkins+Docker实现net core持续集成 - HelloWorld