前言

在项目中使用这一套自动集成的体系之后,一直想找个时间总结出来,用于自己记录也打算将自己的所得分享给园友们,不经常写文章,可能会有错误的地方,希望各位不吝指正,我会及时的改正并表示感谢,希望大家能够一起进步。

前期准备

centos7.5系统环境,关闭防火墙

jenkins in docker 安装

    yum install docker
docker service start

docker pull jenkins

docker run -d -p 8080:8080 -p 50000:50000 \
-v jenkins:/var/jenkins_home \
-v /etc/localtime:/etc/localtime \
--name jenkins \
docker.io/jenkins/jenkins

-d 后台运行镜像

-p 80:8080 将镜像的8080端口映射到服务器的80端口

-p 50000:50000 将镜像的50000端口映射到服务器的50000端口

-v jenkins:/var/jenkins_home 挂载卷

/var/jenkins_home目录为jenkins工作目录,我们将硬盘上的一个目录挂载到这个位置,方便后续更新镜像后继续使用原来的工作目录。该命令会将/var/lib/docker/volumes/jenkins映射到相应路径,默认的挂载卷都在docker目录下的volumes文件夹内,可以自己指定主机内的其他路径

-v /etc/localtime:/etc/localtime 让容器使用和服务器同样的时间设置。

--name jenkins 给容器起一个别名

我在创建好之后遇到了访问jenkins界面白屏的问题,重启容器问题解决,重启大法好。

重启命令 docker service restart

配置jenkins

Publish over SSH插件配置

系统管理->系统设置

Passphrase:用户密码

Git凭证添加

进入凭据->系统->全局凭据->添加

添加成功后,点击Test Configuration 测试是否能够连通

新建构建任务

源码管理

配置如下,凭证选择我们上面配置的git凭证,分支调到需要发布的分支上

构建触发器

选择轮询SCM设置为H/2 * * * *,即每两分钟检查一次是否有新的提交

构建后操作

选择Send files or execute commands over SSH,这里我们不用这个插件进行文件传输,而是用它来执行主机中的shell脚本,配置如下



脚本内容如下:

#!/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 '部署结束'

至此,整个构建过程就结束了,但是你在如此构建几次之后就会发现一个问题

查询了一下,导致该问题的原因是

重新构建镜像的时候,该镜像正在被某容器使用中,那么在重新构建同名同版本镜像后,docker保留原来的镜像,即容器还是用原来的, 那么原来的镜像名称变成none,tag也成了none

解决的办法是 在shell脚本之后添加一行删除tag为none的镜像的脚本,如下

docker images|grep none|awk '{print $3}'|xargs docker rmi

总结

实验的进程总不会像表面那样一番风顺,期间也会遇到各种各样的问题,我很享受那种闯过一关又一关看到成果的过程,后续更新我会将我在部署时遇到的一些小问题整理出来,作为记录学习,感谢阅读。

Gitlab+Jenkins+Docker实现net core持续集成的更多相关文章

  1. 构建gitlab+Jenkins+harbor+kubernetes的DevOps持续集成持续部署环境

    构建gitlab+Jenkins+harbor+kubernetes的DevOps持续集成持续部署环境 整个环境的结构图. 一.准备工作 gitlab和harbor我是安装在kubernetes集群外 ...

  2. Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成(上)

    Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成(上) Jenkins+Docker+SpringCloud持续集成流程说明 大致流程说明: 1) 开发 ...

  3. Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成——部署方案优化

    Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成--部署方案优化 之前我们做的方案部署都是只能选择一个微服务部署并只有一台生产服务器,每个微服务只有一个 ...

  4. asp.netcore+jenkins+docker+svn+centos7.2 持续集成,每天凌晨获取最新代码打包发布

    运行环境: centos7.2服务器或则虚拟机 可以是腾讯云也可以是内网服务器,(如果是内网服务器需要用frp做内网穿透,这样才可以通过外网访问该服务器) svnserver 来托管代码 一.安装je ...

  5. ASP.NET Core + Docker + Jenkins + gogs + CentOS 从零开始搭建持续集成

    为什么不用gitlab? 没有采用gitlab,因为gitlab比较吃配置,至少得2核4G的配置.采用go语言开发的gogs来代替,搭建方便(不到10分钟就能安装完成),资源消耗低,功能也比较强大,也 ...

  6. Docker + Jenkins + Gitlab + Pytest + Allure 接口自动化测试之持续集成实战终极教程

    实战教程篇 前言 这边就不教大家怎么用 pytest 写项目了哦,下面有系列文章能帮助你快速入门 Pytest + Allure 这一篇教程主要是教如何从 0 到 1 搭建自动化测试的持续集成环境 后 ...

  7. Jenkins+maven+git+sonar 系统持续集成&代码单測管理

    Jenkins+maven+git+sonar 系统持续集成&代码单測管理 Jenkins的安装 Jenkins是基于Java开发的一种持续集成工具,用于监控持续反复的工作.功能包含: 1.持 ...

  8. Jenkins+Ant+Git+Jmeter实现持续集成

    个人记录: 基本的配置与Jenkins+Ant+SVN+Jmeter实现持续集成的配置一样,主要在Jenkins的配置上的区别会有所不同 安装的插件: enkins安装好之后,需要为其安装gitlab ...

  9. 使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(二)

    前言     上一篇随笔Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(一)介绍maven和nexus的环境搭建,以及如何使用maven和nexus统一管理库 ...

随机推荐

  1. mingw gcc 静态 static 编译 dav1d libdav1d.a

    export CC=/mingw/bin/gcc export CXX=/mingw/bin/g++ meson --prefix "/usr/local" build --bui ...

  2. git 本地代码提交至远程master分支解决方法

    git 提交代码,本地新建一个my分支,不从本地master分支直接上传,而是先从本地my分支上提交至本地master分支,然后本地master提交至远程master分支上.前提是远程只有一个mast ...

  3. java:Hibernate框架1(环境搭建,Hibernate.cfg.xml中属性含义,Hibernate常用API对象,HibernteUitl,对象生命周期图,数据对象的三种状态,增删查改)

    1.环境搭建: 三个准备+7个步骤 准备1:新建项目并添加hibernate依赖的jar文件  准备2:在classpath下(src目录下)新建hibernate的配置文件:hibernate.cf ...

  4. 一文搞懂HTTP和HTTPS协议

    1.什么是协议? 网络协议是计算机之间为了实现网络通信而达成的一种"约定"或者"规则",有了这种"约定",不同厂商的生产设备,以及不同操作系 ...

  5. python3实现自动化框架robotframework(最新)

    # python3.6及以上版本兼容RIDE1.7.3版本由于最近RIDE1.7.3的版本改进,RIDE这个版本对高版本的wxpython兼容很好,python3.6及以上版本都可以顺利运行RIDE为 ...

  6. <数据结构系列3>队列的实现与变形(循环队列)

    数据结构第三课了,今天我们再介绍一种很常见的线性表——队列 就像它的名字,队列这种数据结构就如同生活中的排队一样,队首出队,队尾进队.以下一段是百度百科中对队列的解释: 队列是一种特殊的线性表,特殊之 ...

  7. 意想不到的JavaScript(每日一题1)

    问题: 答案: 解析:

  8. oracle 11g sqlplus和plsql developer 乱码解决方案

    ----------------------------------华丽的分隔符---------------------------------- 在cmd终端下运行            中文的话 ...

  9. 2019JAVA第十一次实验报告

    #Java实验报告 班级 计科二班 学号 20188442 姓名 吴怡君 完成时间 2019.11.22 评分等级 简易记事本 实验代码 package Domon10; import java.aw ...

  10. Leetcode 38.报数 By Python

    报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1. 1 2. 11 3. 21 4. 1211 5. 111221 1 被读作 "one 1" ...