说道这一块纠结了我两天时间,感觉真的很心累,Jenkins的安装就不多说了

这里我们最好直接安装到宿主机上,应该pull到的jenkins版本是2.6的,里面很多都不支持,我自己试了在容器中安装的情况,效果很不满意

这篇文章主要就是为了解决两个问题:

1、配置问题

2、容器发布运行问题

为了解决这两个问题也是费了我不少精力,首先shell编程你的会啊,做一个DevOps真心累,关于Jenkin拉去代码的问题这里不多说,主要针对上面2个问题说下我个人的观点

微服务架构都是有配置中心,为了解决第一个问题,这里我只能在服务器上放好不同的配置文件放到不同的目录,每次发布的时候根据需要去拷贝配置到发布目录中

接下就是第二个问题了,第二个问题还是蛮头疼的,每次都要打包镜像,运行对应容器,这在自动化发布中就会出现

删除、停止 等相关shell命令 ,但是一旦这个东西不能存在 势必会报错导致发布不成功 ,我这里跟其他的处理方式不一样,有的是安装 danling=true 这种获取没有tag的方式,但是一般打包镜像后默认就加上了tag,所以 docker image -f danling=true这种方式不适用,并且运行中的容器你怎么去处理

没办法自己脑补了下shell编程

总结归纳后shell 代码如下

echo "获取当前容器是否存在-----------------------------------------------------------------"
containerps=$(docker ps -f name=user_node1 -q)
containerstop=$(docker ps -a -f name=user_node1 -q)
for alpha in "$containerps";do
if [ "$alpha" == "" ];then
echo "检查是否存在停止的容器-------------------------------------------------"
for alpha1 in "$containerstop";do
if [ "$alpha1" == "" ];then
echo "不存指定容器-----------------------------------"
else
echo "存在停止了的 然后直接删除-----------开始------------------"
docker rm $alpha1
echo "存在停止了的 然后直接删除-----------完成------------------"
fi
done
else
echo "存在-停止运行 然后删除----------------------开始-----------------"
docker stop $alpha
docker rm $alpha
echo "存在-停止运行 然后删除---------------------完成------------------"
fi
done
echo "获取当前镜像是否存在-----------------------------------------------------------------"
dockerlist=$(docker images userimage:latest -q)
for alpha2 in "$dockerlist";do
if [ "$alpha2" == "" ];then
echo "不存在指定镜像-------------------------------------------------"
else
echo "存在当前指定的镜像 删除镜像--------------开始-----------------------------------"
docker rmi $alpha2
echo "存在当前指定的镜像 删除镜像--------------完成-----------------------------------"
fi
done echo "开始输入工作目录-----------------------------------------------------------------"
echo $WORKSPACE
echo "转到项目工程目录-----------------------------------------------------------------"
cd $WORKSPACE/UserServicesApi/
echo "还原.NetCore Nuget包-----------------------开始------------------------------------------"
dotnet restore
echo "还原.NetCore Nuget包-----------------------完成------------------------------------------"
echo "重新生成------------------------------------开始-----------------------------"
dotnet build
echo "重新生成------------------------------------完成-----------------------------"
echo "项目发布-------------------------------------开始----------------------------"
dotnet publish -c Release
echo "项目发布-------------------------------------完成----------------------------"
echo "转到项目发布目录-----------------------------------------------------------------"
cd bin/Release/netcoreapp2./publish/
echo "拷贝配置中心的统一配置文件文件------------------------------开始-----------------------------------"
\cp ~/student/conf/userconf/appsettings.json $WORKSPACE/UserServicesApi/bin/Release/netcoreapp2./publish/
echo "拷贝配置中心的统一配置文件文件------------------------------完成-----------------------------------"
echo "构建Docker镜像-------------------------------开始----------------------------------"
docker build -t userimage .
echo "构建Docker镜像-------------------------------完成----------------------------------"
echo "运行Docker容器-------------------------------------开始----------------------------"
docker run --name=user_node1 -p : -d userimage
echo "运行Docker容器------------------------------------完成-----------------------------"

首先需要判断是否存在运行中的指定名称容器,如果不存在再去检查是否存在停止的容器信息 ,存在运行的就先停止在删除 ,存在停止的就直接删除 ,注意我代码中定义的变量其实变量输入的值就是容器的 containerid 信息 这个很重要

当然删除镜像就相对简单了 存在就删除就行了,这里有先后顺序,需要先删除容器信息,让后才能删除镜像信息

下面就是Jenkins发布下打印出来的日志,只看下Docker这块的日志,容器ID,以及镜像ID都得到了,这样我们就不需要去关注容器以及镜像存在与否的问题,最后只需替换配置文件构建镜像文件运行容器就行了

+ echo 获取当前容器是否存在-----------------------------------------------------------------
获取当前容器是否存在-----------------------------------------------------------------
++ docker ps -f name=user_node1 -q
+ containerps=e01378e87599
++ docker ps -a -f name=user_node1 -q
+ containerstop=e01378e87599
+ for alpha in '"$containerps"'
+ '[' e01378e87599 == '' ']'
+ echo '存在-停止运行 然后删除----------------------开始-----------------'
存在-停止运行 然后删除----------------------开始-----------------
+ docker stop e01378e87599
e01378e87599
+ docker rm e01378e87599
e01378e87599
+ echo '存在-停止运行 然后删除---------------------完成------------------'
存在-停止运行 然后删除---------------------完成------------------
+ echo 获取当前镜像是否存在-----------------------------------------------------------------
获取当前镜像是否存在-----------------------------------------------------------------
++ docker images userimage:latest -q
+ dockerlist=5cb29f50bc92
+ for alpha2 in '"$dockerlist"'
+ '[' 5cb29f50bc92 == '' ']'
+ echo '存在当前指定的镜像 删除镜像--------------开始-----------------------------------'
存在当前指定的镜像 删除镜像--------------开始-----------------------------------
+ docker rmi 5cb29f50bc92
Untagged: userimage:latest
Deleted: sha256:5cb29f50bc9218b776c9a04872c14ce92b84d3a2f368f7c1306c7a49b0e1e4e8
Deleted: sha256:077943b3a82f33c3b7fba1b12372c936c86c8f41f3e43dbebb2d78b2145c5327
Deleted: sha256:0c34caf4799497fdd12da7bb189f852e40aeaf397b06ac297a23f73272ac9fb8
Deleted: sha256:50a14209600e45d7788494b8277c826e8df67e6765d82c41925ea69c439312f9
+ echo '存在当前指定的镜像 删除镜像--------------完成-----------------------------------'
存在当前指定的镜像 删除镜像--------------完成-----------------------------------

最后构建容器的日志信息都是没问题的

+ docker build -t identityimage .
Sending build context to Docker daemon .685MB Step / : FROM microsoft/dotnet:2.1-aspnetcore-runtime
---> 1fe6774e5e9e
Step / : WORKDIR /appidentity
---> Running in 08426ccfe3c0
Removing intermediate container 08426ccfe3c0
---> 74294d903cd5
Step / : COPY . .
---> 85793e032e03
Step / : EXPOSE
---> Running in 74e621bb8894
Removing intermediate container 74e621bb8894
---> 619a4dd62d83
Step / : ENTRYPOINT ["dotnet", "IdentityServices.dll"]
---> Running in 2143346ae0f0
Removing intermediate container 2143346ae0f0
---> 5155c3859e85
Successfully built 5155c3859e85
Successfully tagged identityimage:latest
+ echo 构建Docker镜像-------------------------------完成----------------------------------
构建Docker镜像-------------------------------完成----------------------------------
+ echo 运行Docker容器-------------------------------------开始----------------------------
运行Docker容器-------------------------------------开始----------------------------
+ docker run --name=identity_node1 -p : -d identityimage
5c5963943892ef3a5ac199bf3c81e0e698d6c8ff1d434a96edbb7444a2f274d3
+ echo 运行Docker容器------------------------------------完成-----------------------------
运行Docker容器------------------------------------完成-----------------------------
Finished: SUCCESS

.NetCore下利用Jenkins如何将程序自动打包发布到Docker容器中运行的更多相关文章

  1. .NetCore下使用IdentityServer4 & JwtBearer认证授权在CentOS Docker容器中运行遇到的坑及填坑

    今天我把WebAPI部署到CentOS Docker容器中运行,发现原有在Windows下允许的JWTBearer配置出现了问题 在Window下我一直使用这个配置,没有问题 services.Add ...

  2. 在 Docker 容器中运行应用程序

    案例说明 运行 3 个容器,实现对网站的监控. 三个容器的说明: 容器 web: 创建自 nginx 映像,使用 80 端口,运行于后台,实现 web 服务. 容器 mailer: 该容器中运行一个 ...

  3. Windows10下的docker安装与入门 (三) 创建自己的docker镜像并且在容器中运行它

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...

  4. Jenkins简明入门(二) -- 利用Jenkins完成Python程序的build、test、deployment

    大家可能还没搞清楚,Jenkins到底能做什么? 本节内容利用Jenkins完成python程序的build.test.deployment,让大家对Jenkins能做的事情有一个直观的了解. 本节内 ...

  5. docker 运行jenkins及vue项目与springboot项目(三.jenkins的使用及自动打包vue项目)

    docker 运行jenkins及vue项目与springboot项目: 一.安装docker 二.docker运行jenkins为自动打包运行做准备 三.jenkins的使用及自动打包vue项目 四 ...

  6. 基于jenkins自动打包并部署docker环境

    一.实验环境 git                      192.168.200.71 jenkins    192.168.200.72 docker               192.16 ...

  7. Linux下将.Asp Core 部署到 Docker容器中

    我们来部署一个简单的例子: 将一个简单的.Aps Core项目部署到Docker容器中并被外网访问 说明: 下面的步骤都是建立在宿主服务器系统已经安装配置过Docker容器,安装Docker相对比较简 ...

  8. 新一代Java程序员必学的Docker容器化技术基础篇

    Docker概述 **本人博客网站 **IT小神 www.itxiaoshen.com Docker文档官网 Docker是一个用于开发.发布和运行应用程序的开放平台.Docker使您能够将应用程序与 ...

  9. 将netcore网站部署到docker容器中

    一.背景 最近一直在看docker的教程,基础知识看的差不多了.理论总要运用于实践,所以下面我们就来把最简单的一个netcore网站托管到docker容器中. 环境:1.docker for wind ...

随机推荐

  1. Spring的单例实现原理-登记式单例

    单例模式有饿汉模式.懒汉模式.静态内部类.枚举等方式实现,但由于以上模式的构造方法是私有的,不可继承,Spring为实现单例类可继承,使用的是单例注册表的方式(登记式单例). 什么是单例注册表呢, 登 ...

  2. SQL——sql年龄段查询

    select * from 表 p where p.gender <> '男' ) ) select * ) ) 查询出所有年龄在15~49岁的非男性的信息

  3. pyqt5-键盘事件

    视频教程:https://v.qq.com/x/page/p08592bhsag.html keyPressEvent(QKeyEvent)    键盘按下时调用 keyReleaseEvent(QK ...

  4. 第16月第24天 find iconv sublime utf-8

    1. find . -type f -exec echo {} \; find src -type f -exec sh -c "iconv -f GB18030 -t UTF8 {} &g ...

  5. cetus系列~ 继续分析

    一 简介:我们来继续探讨cetus的细节问题 二 命令 1 select help 查看帮助  2 select * from backends 查看后端列表  3 select conn_detai ...

  6. SpringBoot常用Starter介绍和整合模板引擎Freemaker、thymeleaf 4节课

    1.SpringBoot Starter讲解 简介:介绍什么是SpringBoot Starter和主要作用 1.官网地址:https://docs.spring.io/spring-boot/doc ...

  7. Linux搜索查找类指令

    ⒈find [搜索范围] [选项] find指令将从指定目录下递归的遍历其各个子目录,将满足条件的文件或者目录显示在终端 选项说明: 选项 功能 -name<查询方式> 按照指定的文件名查 ...

  8. 【转】Python数据类型之“集合(Sets)与映射(Mapping)”

    [转]Python数据类型之“集合(Sets)与映射(Mapping)” 一.集合类型(Sets) 集合对象是不同的(不可重复)hashable对象的无序集合.常见用法包括:成员关系测试.移除序列中的 ...

  9. Makefile经典教程(一个很棒很清晰的讲解)【转】

    转自:https://blog.csdn.net/seven_amber/article/details/70216216 该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神 ...

  10. 【转】SourceInsight4破解笔记

    时隔好多年,sourceinsight4以迅雷不及掩耳之势的来了.与3.5相比,sourceinsight4多了代码折叠以及文件标签功能,可谓是让sourceinsight迷兴奋了好几晚上.废话不多说 ...