Gitlab+Jenkins+Docker实现net core持续集成
前言
在项目中使用这一套自动集成的体系之后,一直想找个时间总结出来,用于自己记录也打算将自己的所得分享给园友们,不经常写文章,可能会有错误的地方,希望各位不吝指正,我会及时的改正并表示感谢,希望大家能够一起进步。
前期准备
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持续集成的更多相关文章
- 构建gitlab+Jenkins+harbor+kubernetes的DevOps持续集成持续部署环境
构建gitlab+Jenkins+harbor+kubernetes的DevOps持续集成持续部署环境 整个环境的结构图. 一.准备工作 gitlab和harbor我是安装在kubernetes集群外 ...
- Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成(上)
Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成(上) Jenkins+Docker+SpringCloud持续集成流程说明 大致流程说明: 1) 开发 ...
- Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成——部署方案优化
Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成--部署方案优化 之前我们做的方案部署都是只能选择一个微服务部署并只有一台生产服务器,每个微服务只有一个 ...
- asp.netcore+jenkins+docker+svn+centos7.2 持续集成,每天凌晨获取最新代码打包发布
运行环境: centos7.2服务器或则虚拟机 可以是腾讯云也可以是内网服务器,(如果是内网服务器需要用frp做内网穿透,这样才可以通过外网访问该服务器) svnserver 来托管代码 一.安装je ...
- ASP.NET Core + Docker + Jenkins + gogs + CentOS 从零开始搭建持续集成
为什么不用gitlab? 没有采用gitlab,因为gitlab比较吃配置,至少得2核4G的配置.采用go语言开发的gogs来代替,搭建方便(不到10分钟就能安装完成),资源消耗低,功能也比较强大,也 ...
- Docker + Jenkins + Gitlab + Pytest + Allure 接口自动化测试之持续集成实战终极教程
实战教程篇 前言 这边就不教大家怎么用 pytest 写项目了哦,下面有系列文章能帮助你快速入门 Pytest + Allure 这一篇教程主要是教如何从 0 到 1 搭建自动化测试的持续集成环境 后 ...
- Jenkins+maven+git+sonar 系统持续集成&代码单測管理
Jenkins+maven+git+sonar 系统持续集成&代码单測管理 Jenkins的安装 Jenkins是基于Java开发的一种持续集成工具,用于监控持续反复的工作.功能包含: 1.持 ...
- Jenkins+Ant+Git+Jmeter实现持续集成
个人记录: 基本的配置与Jenkins+Ant+SVN+Jmeter实现持续集成的配置一样,主要在Jenkins的配置上的区别会有所不同 安装的插件: enkins安装好之后,需要为其安装gitlab ...
- 使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(二)
前言 上一篇随笔Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(一)介绍maven和nexus的环境搭建,以及如何使用maven和nexus统一管理库 ...
随机推荐
- Altera DDR2 IP核学习总结3-----------DDR2 IP核的使用
根据上一篇生成的IP核,例化之后如上图,Local开头的数据是用户侧数据,其他数据暂时不用纠结,不用管. 这些是需要关注的信号,但是初学阶段很难对这些信号形成具体的概念,这里参考明德扬的代码进行二次封 ...
- C语言循环队列
#include<stdio.h> #include<stdlib.h> #include<string.h> //循环队列 typedef struct { in ...
- noi.ac-CSP模拟Day5T1 组【二分图最大匹配】
虽然是T3,但是想通了之后还是不难的. 数据规模也不大. 可以考虑先枚举一个班长,根据题意,和班长连边的学生就可以不用管,没有和班长连边的学生就要去找一个和班长连边的学生组队,如果所有没有和班长连边的 ...
- 基于vant实现一个问卷调查
实现背景 最近学习<vue实战>,第二篇进阶篇有一个练习 刚好最近在研究vue移动端框架vant 两者结合,实现这么个小项目 实现代码 新建 vue单文件 L0529L.vue <t ...
- 通过U盘或CD/DVD装centos7,出现“dracut-initqueue timeout..."解决办法
1.在用CD/DVD挂载centos7镜像安装系统时,出现“dracut-initqueue timeout...", :/# cd dev :/# ls 2.这是因为安装程序未能找到安装文 ...
- equals与== 和toString方法
/** * equals()方法的使用 * * 1.java.lang.Object类中的equals()方法的定义: * * public boolean equals(Object obj) { ...
- SpringMVC上传文件总结
如果是maven项目 需要在pom.xml文件里面引入下面两个jar包 <dependency> <groupId>commons-fileupload</groupId ...
- tp5后台同步更新配置文件
thinkphp5 配置文件路径:app/extra/web.php public function add(){ $path = 'app/extra/web.php'; $file = inclu ...
- RabbitMQ入门教程(八):远程过程调用RPC
原文:RabbitMQ入门教程(八):远程过程调用RPC 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.cs ...
- Python类函数调用:missing 1 required positional argument
在Python中,应该先对类进行实例化,然后在应用类.注意,实例化的过程是应该加括号的.