Centos7 & Docker & Jenkins & ASP.NET Core 2.0 自动化发布和部署

前言

Docker 一直很火热,一直想把原本的 Jenkins 自动部署工具搬到 Docker 上面,无奈今年一直忙于各种事情,迟迟未实施这个事情,正好迎来了 dotnet core 2.0 的正式发布,升级项目的同时,顺便直接将 Jenkins 搬到 Docker上。为什么要写这篇文章呢?因为找过相关的资料,大多数文章都是基于 Ubuntu 安装.net core 又或者 GitLab 进行持续集成 自动部署等等等,并未有人尝试过Centos7.3 上部署 Jenkins 并且 构建 ASP.NET CORE 2.0 的应用。当然笔者表示并不知道为什么 ubuntu 有这么多人青睐。接下来,笔者将从本片博文中,粗略的教大家怎么安装 Docker 和 Jenkins 并且使用 Visual Studio 2017 新建Demo 并实现自动部署

环境准备
  • 硬件配置: 1 核 1G  1M 带宽。50G 硬盘。

  • 系统环境:CentOS 7.3 (64位)

  • 其实用的就是腾讯云

安装 Docker

其实安装 Docker 的过程,大家可以到 Docker 官网找到自己相对应的安装文档进行安装,Docker 区分 CE 和 EE 的两个版本,具体这两个版本有什么区别,大家自行查阅相关资料,这里不再概述。教程用的是 CE 那么就找到对应的官方文档进行安装,以下是教程安装的步骤

1.更新一下包吧,多更无害

2.安装所需的软件包 (其实这些腾讯云都具备了,只不过怕有些阉割版的系统缺少,所以贴上命令,安装过的使用该命令不会造成伤害)

3.使用稳定版的仓库(当然可以使用最新版或测试版的仓库,这个需要官方的说明)

4.安装 Docker ce 

tips:在生产系统上,您应该安装特定版本的 Docker CE,而不是始终使用最新版本。

5.启动 Docker

6. Docker 通过运行 hello-world 映像验证是否正确安装。

如果出现以下的界面,就代表安装成功

配置 Docker 加速器

此步骤不是必须的,前提是你的环境有梯子或者网速可以的,那么可以忽略这个步骤。

使用 https://mirror.ccs.tencentyun.com  这个加速地址的前提是你必须要使用腾讯云,该地址外部无法访问,只有腾讯云才能使用此镜像地址。你可以使用 DaoCloud 加速地址,具体另行查阅相关资料。

安装 Jenkins

首先不直接从 Docker Store 上直接 Pull Jenkins 的 Image 文件,因为待会需要进行 dotnet core 的 Docker 自动部署,需要对宿主机上的 Docker 进行直接操作,那么需要挂载 Docker 给 Jenkins Image,所以现在需要自己动手编写 Dockerfile 构建自定义的 Jenkins。

插入以下内容:

如果不安装 libltdl7 会导致如下这个问题,原因是 jenkins 容器内部没有这个包

在 Jenkins 操作宿主的 Docker 的时候会出现拒绝访问的问题,其实就是容器的  jenkins 用户没有权限访问容器外的 docker 命令,所以 RUN 命令 需要把Jenkins 用户加入到 Docker 用户组

构建 Image

出现以上 Successfully 内容代表安装 Jenkins 成功

在启动 Jenkins 时,需要先创建一个 Jenkins 的配置目录,并且挂载到 docker 里的 Jenkins 目录下

运行 Jenkins

第一行:构建一个名称为 jenkins 的容器  -p 是容器运行开放端口

第二行 和第三行: -v 是将宿主机的 docker 文件挂载进容器里

第四行:建立宿主机的配置目录,挂载进 docker 容器里,这样容器里的 Jenkins 配置目录文件就会映射出来

第五行:使用 auto-jenkins Image 并且后台启动

这个时候 run Jenkins 会提示成功

执行 docker ps 命令后,发现什么都没有

执行 docker ps -a 命令看看

 执行 docker start -a jenkins 让容器前台输出运行信息的方式运行

不难看出其实 Jenkins 启动已经是可以了,只是权限问题导致这个错误的信息。

现在需要看一下 Jenkins 官方的 Dockerfile 

 知道问题原因,贴上代码了。

继续执行运行 Jenkins 代码

这时你会看到悲催的信息

容器之前已经运行过了,所以会有一个容器已经存在了。哥来给你搽眼泪。执行以下命令,删除原本 run 出来的容器

删除完容器后,继续执行运行命令

出现一串字符后,执行 docker ps 会发现容器已经启动了,正常了。这个时候是不是可以使用了?别着急,还有很长的路。

 

配置 Jenkins

打开浏览器输入地址 your IP:8080 进行访问,你会开心的看到这个界面,看到这个界面代表你的 Jenkins 已经安装成功了,但是需要进行配置,现在就教大家怎么去配置

首先,进入容器内

查看 /var/jenkins_home/secrets/initialAdminPassword 文件内的密码

其实不一定要进入容器内查看密码,可以直接在宿主机的环境下,查看 /var/jenkins//secrets/initialAdminPassword 的内容,因为之前笔者已经将这个目录挂载进 Docker 里面了。复制输出的内容,粘贴到 Administrator password,输入 exit 退出容器,此时进行下一步你会看到此界面,点击 Install suggested plugins

等待初始化完毕 

到了这一步,自己随缘去填吧。

使用 VS2017 创建一个 ASP.NET Core 2.0 Web 应用程序,并将代码上传到git。这里笔者就不演示上传代码的过程步骤了。 

为你们准备了一个地址,方便你们完成本教程:http://git.oschina.net/wenalu/MvcTest

 新建一个自由风格的软件项目,并填名称 点击 OK

填写源代码管理

勾选 Poll SCM 设置拉取 Git 上代码的间隔,笔者这里是两分钟拉取一次

勾上 Delete workspace before build start 是设置构建前删除工作区

勾上 Abort the build if it’s stuck 是设定构建的超时时间,如果构建使用的时间超过设定的时间,那么就认为这次的构建是失败的。笔者这里超时设置的是10分钟

增加一个 Execute Shell 脚本,并填写以下脚本内容

 

应用保存,回到项目界面上。点击立即构建进行部署工作 SUCCESS

打开浏览器,地址输入 your IP:8088/

遇到的问题

其实上面的篇幅为了大家能尽快的实现部署,只是简要的介绍了途中一些常犯的错误。其实在搭建这个 CI 环境的时候遇到不止这些问题,比如说一开始的  Dockerfile 内容并不像教程中的一样。一开始是这样的:

当你如果在网上找到其他教程,教你如何安装 jenkins,而你使用了类似于这个内容的 Dockerfile,那么会在 Jenkins 构建编译的时候产生如下两个错误:

第一:缺少 docker-compose 

出现这个状况,当然是可以解决的。首先进入容器,然后找到官方的安装docker-compose 文档进行安装,jenkins 使用的是 Linux 直接找到对应的 Linux 安装资料即可。

第二:权限问题

从容器内手动安装 docker-compose 会出现无法安装的情况,原因是 Jenkins 用户没有安装 docker-compose 的权限

解决上述问题,当然可以切换 root 用户,但是笔者使用最笨最直接的方式,从构建镜像的时候就直接不使用 jenkins 用户,所以教程中并没有最后一句 USER jenkins 。这样做目的是让教程步骤更顺利

tips:正式生产环境不建议直接切换到 root 用户运行

运行 Jenkins 命令一开始是这样的:

这样会造成构建的时候找到一个根本不存在的目录上

其实就是第三句 将 /var/jenkins 改成  /var/jenkins_home 就解决这个问题了。

此时此刻,如果你曾经遇到过这样的问题,哥现在已经给你擦眼泪了。

当然这里不仅仅有这些问题的存在,只是有一部分在做这个教程的时候没有截图,就不再阐述了。

结语

其实笔者曾 Google 过这些教程,但是一无所获,发觉挺多人使用 Ubuntu 的,就是找不到一个 Centos 的案例。当然笔者也不知道他们为什么喜欢使用Ubuntu 。这里把实施过程的心得分享给大家,是因为怕很多人跟笔者一样重滔覆辙,没有人帮助的日子挺惨的,也就算为大家做些贡献吧。

出处:http://www.cnblogs.com/LongJiangXie/p/7517909.html

技术交流QQ群:238757010

关注微信公众号Reboot51 后台回复 Python、自动化即可获得相应课程的试听资料

文章分类 未分类

发表评论

电子邮件地址不会被公开。

在线交流

数百位业内高手和同行在等你交流
Reboot运维开发分享