设为首页 收藏本站
查看: 1314|回复: 0

[经验分享] Centos7 & Docker & Jenkins & ASP.NET Core 2.0 自动化发布和部署

[复制链接]

尚未签到

发表于 2017-11-22 11:35:36 | 显示全部楼层 |阅读模式
写在前面
  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.更新一下包吧,多更无害



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



# sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
  3.使用稳定版的仓库(当然可以使用最新版或测试版的仓库,这个需要官方的说明)



# sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
  4.安装Docker ce



# sudo yum install docker-ce
  tips:在生产系统上,您应该安装特定版本的Docker CE,而不是始终使用最新版本。
  5.启动Docker



# sudo systemctl start docker
  6.docker通过运行hello-world 映像验证是否正确安装。



# docker run hello-world
  如果出现以下的界面,就代表安装成功
DSC0000.jpg


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



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

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



# touch Dockerfile
# vim Dockerfile
  插入以下内容:



FROM jenkins
USER root
#清除了基础镜像设置的源,切换成腾讯云的jessie源
#使用非腾讯云环境的需要将 tencentyun 改为 aliyun
RUN echo '' > /etc/apt/sources.list.d/jessie-backports.list \
&& echo "deb http://mirrors.tencentyun.com/debian jessie main contrib non-free" > /etc/apt/sources.list \
&& echo "deb http://mirrors.tencentyun.com/debian jessie-updates main contrib non-free" >> /etc/apt/sources.list \
&& echo "deb http://mirrors.tencentyun.com/debian-security jessie/updates main contrib non-free" >> /etc/apt/sources.list
#更新源并安装缺少的包
RUN apt-get update && apt-get install -y libltdl7 && apt-get update
ARG dockerGid=999
RUN echo "docker:x:${dockerGid}:jenkins" >> /etc/group
# 安装 docker-compose 因为等下构建环境的需要
RUN curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

RUN chmod +x /usr/local/bin/docker-compose
  如果不安装 libltdl7 会导致如下这个问题,原因是jenkins容器内部没有这个包



docker: error while loading shared libraries: libltdl.so.7: cannot open shared object file: No such file or directory
Build step 'Execute shell' marked build as failure
  在Jenkins操作宿主的Docker的时候会出现拒绝访问的问题,其实就是容器的jenkins用户没有权限访问容器外的docker命令,所以 RUN命令 需要把Jenkins用户加入到Docker用户组
  构建Image



# docker build . -t auto-jenkins
DSC0001.jpg

  出现以上 Successfully 内容代表安装Jenkins成功
  在启动Jenkins时,需要先创建一个Jenkins的配置目录,并且挂载到docker 里的Jenkins目录下



# mkdir -p /var/jenkins_home
  运行 Jenkins



# docker run --name jenkins -p 8080:8080 -p 50000:50000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(which docker):/bin/docker \
-v /var/jenkins_home :/var/jenkins_home \
-d auto-jenkins
  第一行:构建一个名称为jenkins的容器  -p 是容器运行开放端口
  第二行 和第三行: -v 是将宿主机的docker文件挂载进容器里
  第四行:建立宿主机的配置目录,挂载进docker容器里,这样容器里的Jenkins配置目录文件就会映射出来
  第五行:使用auto-jenkins Image 并且后台启动
  这个时候 run Jenkins 会提示成功 DSC0002.jpg
  执行 docker ps 命令后,发现什么都没有
DSC0003.jpg

  执行 docker ps -a 命令看看
DSC0004.jpg

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

  不难看出其实 Jenkins 启动已经是可以了,只是权限问题导致这个错误的信息。
  现在需要看一下Jenkins官方的Dockerfile
DSC0006.png

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



##修改 /var/jenkins 文件夹权限
# chown -R 1000 /var/jenkins_home
  继续执行运行Jenkins 代码



# docker run --name jenkins -p 8080:8080 -p 50000:50000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(which docker):/bin/docker \
-v /var/jenkins_home:/var/jenkins_home \
-d auto-jenkins
  这时你会看到悲催的信息
DSC0007.jpg

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



# docker rm -f jenkins
  删除完容器后,继续执行运行命令



# docker run --name jenkins -p 8080:8080 -p 50000:50000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(which docker):/bin/docker \
-v /var/jenkins_home:/var/jenkins_home \
-d auto-jenkins
  出现一串字符后,执行 docker ps 会发现容器已经启动了,正常了。这个时候是不是可以使用了?别着急,还有很长的路。 DSC0008.jpg

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

  首先,进入容器内



# docker exec -it jenkins /bin/bash
  查看 /var/jenkins_home/secrets/initialAdminPassword 文件内的密码



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

  等待初始化完毕
DSC00011.jpg

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

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

  为你们准备了一个地址,方便你们完成本教程:http://git.oschina.net/wenalu/MvcTest
  新建一个自由风格的软件项目,并填名称 点击 OK
DSC00014.jpg

  填写源代码管理
DSC00015.jpg

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

  勾上 Delete workspace before build start 是设置构建前删除工作区
  勾上 Abort the build if it's stuck 是设定构建的超时时间,如果构建使用的时间超过设定的时间,那么就认为这次的构建是失败的。笔者这里超时设置的是10分钟
DSC00017.jpg

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



#!/bin/bash
# 获取短版本号
GITHASH=`git rev-parse --short HEAD`
echo ---------------Remove-Orphans------------------
docker-compose -f ./docker-compose.yml -f ./docker-compose.override.yml  -p dockercompose4255153253317384266 down --rmi local --remove-orphans
echo ------------------Config-----------------------
docker-compose -f ./docker-compose.ci.build.yml -p dockercompose4255153253317384266 config
echo ------------------Build------------------------
docker-compose -f ./docker-compose.ci.build.yml -p dockercompose4255153253317384266 up --build
echo ---------------Publishing...------------------
docker-compose -f "./docker-compose.yml" -f "./docker-compose.override.yml"  -p dockercompose4255153253317384266 up -d --build
DSC00018.jpg

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

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


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



FROM jenkins
USER root
#清除了基础镜像设置的源,切换成阿里云的jessie源
RUN echo '' > /etc/apt/sources.list.d/jessie-backports.list \
&& echo "deb http://mirrors.tencentyun.com/debian jessie main contrib non-free" > /etc/apt/sources.list \
&& echo "deb http://mirrors.tencentyun.com/debian jessie-updates main contrib non-free" >> /etc/apt/sources.list \
&& echo "deb http://mirrors.tencentyun.com/debian-security jessie/updates main contrib non-free" >> /etc/apt/sources.list
#更新源并安装缺少的包
RUN apt-get update && apt-get install -y libltdl7 && apt-get update
ARG dockerGid=999
RUN echo "docker:x:${dockerGid}:jenkins" >> /etc/group
USER jenkins
  当你如果在网上找到其他教程,教你如何安装jenkins,而你使用了类似于这个内容的Dockerfile,那么会在Jenkins构建编译的时候产生如下两个错误:

第一:缺少 docker-compose
DSC00021.jpg

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

第二:权限问题
  从容器内手动安装 docker-compose 会出现无法安装的情况,原因是Jenkins 用户没有安装docker-compose 的权限
DSC00022.jpg

  解决上述问题,当然可以切换 root 用户,但是笔者使用最笨最直接的方式,从构建镜像的时候就直接不使用 jenkins 用户,所以教程中并没有最后一句 USER jenkins 。这样做目的是让教程步骤更顺利
  tips:正式生产环境不建议直接切换到 root 用户运行
  运行 Jenkins 命令一开始是这样的:



# docker run --name jenkins -p 8080:8080 -p 50000:50000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(which docker):/bin/docker \
-v /var/jenkins:/var/jenkins_home \
-d auto-jenkins
  这样会造成构建的时候找到一个根本不存在的目录上
DSC00023.jpg

  其实就是第三句 将/var/jenkins 改成 /var/jenkins_home 就解决这个问题了。
  此时此刻,如果你曾经遇到过这样的问题,哥现在已经给你擦眼泪了。
  当然这里不仅仅有这些问题的存在,只是有一部分在做这个教程的时候没有截图,就不再阐述了。

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-409471-1-1.html 上篇帖子: Ubuntu16.04安装Jenkins 下篇帖子: 用Vagrant创建Jenkins构建环境
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表