热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Centos7+Docker+Jenkins+ASP.NETCore2.0自动化发布与部署的示例分析

这篇文章主要介绍了Centos7+Docker+Jenkins+ASP.NETCore2.0自动化发布与部署的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家

这篇文章主要介绍了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.更新一下包吧,多更无害

# 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

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

Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的示例分析

配置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

Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的示例分析

出现以上 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 会提示成功

Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的示例分析

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

Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的示例分析

执行 docker ps -a 命令看看

Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的示例分析

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

Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的示例分析

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

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

Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的示例分析

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

##修改 /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

这时你会看到悲催的信息

Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的示例分析

容器之前已经运行过了,所以会有一个容器已经存在了。哥来给你搽眼泪。执行以下命令,删除原本 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 会发现容器已经启动了,正常了。这个时候是不是可以使用了?别着急,还有很长的路。

Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的示例分析

配置Jenkins

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

Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的示例分析

首先,进入容器内

# 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

Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的示例分析

等待初始化完毕

Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的示例分析

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

Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的示例分析

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

Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的示例分析

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

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

Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的示例分析

填写源代码管理

Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的示例分析

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

Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的示例分析

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

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

Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的示例分析

增加一个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

Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的示例分析

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

Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的示例分析

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

Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的示例分析

遇到的问题

其实上面的篇幅为了大家能尽快的实现部署,只是简要的介绍了途中一些常犯的错误。其实在搭建这个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

Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的示例分析

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

第二:权限问题

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

Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的示例分析

解决上述问题,当然可以切换 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

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

Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的示例分析

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

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

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

感谢你能够认真阅读完这篇文章,希望小编分享的“Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持编程笔记,关注编程笔记行业资讯频道,更多相关知识等着你来学习!


推荐阅读
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了在Ubuntu系统中清理残余配置文件和无用内容的方法,包括清理残余配置文件、清理下载缓存包、清理不再需要的包、清理无用的语言文件和清理无用的翻译内容。通过这些清理操作可以节省硬盘空间,提高系统的运行效率。 ... [详细]
  • 现在比较流行使用静态网站生成器来搭建网站,博客产品着陆页微信转发页面等。但每次都需要对服务器进行配置,也是一个重复但繁琐的工作。使用DockerWeb,只需5分钟就能搭建一个基于D ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 解决github访问慢的问题的方法集锦
    本文总结了国内用户在访问github网站时可能遇到的加载慢的问题,并提供了解决方法,其中包括修改hosts文件来加速访问。 ... [详细]
  • Linux下安装免费杀毒软件ClamAV及使用方法
    本文介绍了在Linux系统下安装免费杀毒软件ClamAV的方法,并提供了使用该软件更新病毒库和进行病毒扫描的指令参数。同时还提供了官方安装文档和下载地址。 ... [详细]
  • 本文介绍了5个基本Linux命令行工具的现代化替代品,包括du、top和ncdu。这些替代品在功能上进行了改进,提高了可用性,并且适用于现代化系统。其中,ncdu是du的替代品,它提供了与du类似的结果,但在一个基于curses的交互式界面中,重点关注占用磁盘空间较多的目录。 ... [详细]
  • 大坑|左上角_pycharm连接服务器同步写代码(图文详细过程)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了pycharm连接服务器同步写代码(图文详细过程)相关的知识,希望对你有一定的参考价值。pycharm连接服务 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 本文探讨了容器技术在安全方面面临的挑战,并提出了相应的解决方案。多租户保护、用户访问控制、中毒的镜像、验证和加密、容器守护以及容器监控都是容器技术中需要关注的安全问题。通过在虚拟机中运行容器、限制特权升级、使用受信任的镜像库、进行验证和加密、限制容器守护进程的访问以及监控容器栈,可以提高容器技术的安全性。未来,随着容器技术的发展,还需解决诸如硬件支持、软件定义基础设施集成等挑战。 ... [详细]
  • 本文介绍了在Android Studio中使用命令行build gradle的方法,并解决了一些常见问题,包括手动配置gradle环境变量和解决External Native Build Issues的方法。同时提供了相关参考文章链接。 ... [详细]
  • 程序员如何选择机械键盘轴体?红轴和茶轴对比
    本文介绍了程序员如何选择机械键盘轴体,特别是红轴和茶轴的对比。同时还介绍了U盘安装Linux镜像的步骤,以及在Linux系统中安装软件的命令行操作。此外,还介绍了nodejs和npm的安装方法,以及在VSCode中安装和配置常用插件的方法。最后,还介绍了如何在GitHub上配置SSH密钥和git的基本配置。 ... [详细]
author-avatar
16_阿PIE覀_295
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有