今天这篇【跨平台】系列的第四章节,在之前的文章或视频中,已经对Docker讲的一些了,当然都没有深入讲解,《DockerDesktop桌面版》的视频以后再开吧,目前的这些已经基本能满足我们的需要,主要是部署相关的,这里也简单列举一些: 《[跨平台系列三Docker篇]:ASP.NET Core应用》 《ASPNetCore Docker容器化操作(上)》 《ASPNetCore Docker容器化操作 (下)》 《Docker 容器端口映射解析》 《Docker 部署VUE项目》
那我们就继续往下走,其实如果你是跟着我的教程走的,肯定能发现,我是从windows到Linux,然后到Mysql,接着Docker,现在是Jenkins(CICD),这一步说完,就是到了微服务部分了,可能也就是到2021年了,希望今年赶快过去吧🍊。
废话不多说,今天还是老规矩,以后的文章和视频也基本都是无脑操作了,毕竟基础知识我已经讲了一年了,也应该学会长大了,不能一直啃底层了。
PS:现已支持镜像内用doc具体命令底部评论,本文简单的使用了Docker版Jenkins来部署容器,但是暂时不适用使用docker来部署dotnetcore应用程序的项目,下文会说到,如果想用docker来部署netcore,还是建议在宿主机里部署Jenkins,当然如果有更好的方案,我也会在下篇文章说明。
1 配置Docker环境
这一块主要是复习的目的,如果你还不会Docker的话,我希望你应该好好学学,我的文章和视频也都讲到了,都可以看看,比如上文提到的那几个链接。
我的系统是CentOS,2C4G5M的,安装完成后,内存占用情况如下,还是挺小的,就按照这个配置就行。
所以你可以根据自己的情况酌情选择服务器,要是1核1G的话就算了。
记得配置下安全组和端口开放规则。
购买新的服务器后,分步骤执行:
更新系统
//更新系统
sudo yum update
(Linux更新系统结果图)
安装Docker
既然我们已经学会了使用Docker,那以后基本的安装都可以通过镜像来处理,包括在上节视频中说到的部署Vue项目,其实就是启动了一个nginx的镜像容器。
当然,其实你也可以自己去手动安装,无论是Linux还是Windows,但是麻烦的简直不要不要的,各种依赖,所以还是直接使用Docker吧。
#Step 1: 安装必要的一些系统工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 #Step 2: 添加软件源信息 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #Step 3: 缓存并安装Docker-CE(可选) sudo yum makecache fast sudo yum -y install docker-ce #Step 4: 开启Docker服务 sudo service docker start #Step 5: 设置Docker开机自启动 systemctl enable docker #Step 6: 启动Docker systemctl start docker #Step 7: 查看版本 docker --version
到这里基本应该就能安装成功了,如果安装失败,可以看看具体的错误是什么,一般来说,我都是新服务器,更新完系统,先安装Docker,如果安装SDK的话,可能会有一个组件冲突,所以还是先安装Docker吧。
(Docker安装流程图)
你可以使用docker run hello-world 做下测试,如果没有问题,那就十分恭喜了。我们继续往下走,下边的才是今天的重点,安装部署Jenkins应用服务。
2 安装Jenkins服务
如果我们使用Docker镜像的话,可以直接Search下,可以看到有很多的镜像文件,
docker search jenkins
其中第一个和第二个其实都是官方的,但是第一个已经不维护了,我们一般都是使用的第二个。
这里有一个问题要先思考下,如果用镜像的方案的话,那如何在这个Jenkins容器里使用docker来构建我们的dotnet镜像?这个需要好好的想想,如果你的aspnetcore程序打算使用docker容器化的话,以下这个方案不一定是最终的方案,但是普通的dotnet xxx.dll的这种普通发布模式肯定是可以的,我以后会有文章继续说,此处按下不表。
构建Jenkins镜像
我们直接pull下来这个镜像,我这里用第三个测试,但是下文用的还是第二个镜像:
(自定义Jenkins镜像构建图) 但是这样是有问题的,因为jenkins的docker版本本身没有dotnetcore的环境,所以我们需要先自己动手制作下包含dotnet环境的jenkins的Docker的Container,所以我们就先创建一个包含dotnetcore的自定义Jenkins镜像吧,好像已经有人创建好了,具体名字我忘了,当然,其实我这个pull到dockerhub里,你也可以直接拿来用。
首先那我们在一个空的文件夹里,创建一个Dockerfile文件即可:
FROM jenkins/jenkins
# Switch to root to install .NET Core SDK
USER root
# Show distro information!
RUN uname -a && cat /etc/*release
# Based on instructiions at https://www.microsoft.com/net/download/linux-package-manager/debian9/sdk-current
# Install dependency for .NET Core 3
RUN apt-get update
RUN apt-get install -y curl libunwind8 gettext apt-transport-https
# Based on instructions at https://www.microsoft.com/net/download/linux-package-manager/debian9/sdk-current
# Install microsoft.qpg
RUN curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
RUN mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
RUN sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-debian-stretch-prod stretch main" > /etc/apt/sources.list.d/dotnetdev.list'
# Install the .NET Core framework
RUN apt-get update
RUN apt-get install -y dotnet-sdk-3.1
# Switch back to the jenkins user.
USER jenkins
根据这个Dockerfile来构建一个新的镜像,
docker build -t my-docker-jenk .
生成容器实例
那下边我们就需要生成容器实例了。
创建一个jenkins的工作目录,可以自定义做相关的配置:
//创建工作目录
mkdir /home/jenkins_home
//赋予权限
chown -R 1000 /home/jenkins_home
然后我们来生成容器
docker run -d --name jenkins_01 -p 80:8080 -v /home/jenkins_01:/home/jenkins_01 my-docker-jenk
Jenkins默认的开放容器端口是8080和50000,但是你可以自定义宿主机的监听端口,比如我 这里就直接80端口了。
如果这个时候没有什么错误,那恭喜你,第二步已经完成,下一步就是要配置我们的Jenkins网站应用了。
3 配置Jenkins应用
随着上边我们的Jenkins服务的配置完成,他内部已经做了web服务的代理,直接可以在外网就可以访问了,输入我们的ip地址,因为上面我是80端口监听的,所以直接访问ip地址即可:
我们从页面也能看到,这里为了安全,需要一个超级管理员的密码,地址,就是在我们上边配置的文件夹下的文件里,请注意,这个文件夹是在容器里的,不是在我们的宿主机的,可以使用命令来查看:
// 进入容器
docker exec -it jenkins_01 bash
// 查看密码
cat /var/jenkins_home/secrets/initialAdminPassword
我们把密钥拷贝出来,exit退出容器,添加到web应用的密码框内,右下角点击continue继续。
安装插件
这里首先可以左下角,看到Jenkins的版本,然后中间是两个选项,用来安装插件的,左边是默认常用的一些,右侧的是你可以自定义的一些插件,我们直接点击左侧的即可。
如果在安装插件的过程中,报错了,不用慌,你可以处理好,然后继续再执行一遍的,就算是Retry以后还不行,也可以Continue,安装好后,我们依然可以自定义安装插件:
安装插件后,没有问题,会跳转到用户配置页面,都是必填项。
然后配置实例(Jenkins URL 用于给各种Jenkins资源提供绝对路径链接的根地址。这意味着对于很多Jenkins特色是需要正确设置的,例如:邮件通知、PR状态更新以及提供给构建步骤的BUILD_URL
环境变量。
推荐的默认值显示在尚未保存,如果可能的话这是根据当前请求生成的。最佳实践是要设置这个值,用户可能会需要用到。这将会避免在分享或者查看链接时的困惑。)
最后,配置成功!
进入到配置页面,还是很丰富的功能:
当然,如果系统管理里有错误,我们可以手动安装和修改:
那到了这里,我们的Jenkins已经完全的配置好了,下面就用一个helloworld来测试一下吧。
4 测试Hello world
创建测试项目的过程就忽略了,就是普通的aspnetcore的webapi程序。
1、创建自由风格的软件项目
2、添加源代码管理
3、构建命令
这个时候我们点击保存,然后执行下构建就行,
然后就可以看到1楼#1的构建状态变成了蓝色,如果报错是红色的,
正常的输出结果是这样的:
当然,如果有错误,你可以在控制台输出上看到内容,比如这里是没有安装dotnet,但是我们已经安装了,这就是文章开头我们说的那个问题。
到这里就已经没问题了,剩下的就是服务器代理的问题了,你可能会说,那如何才能配合nginx做远程代理,如果外网访问,blogcore和admin前后端又是如何构建和发布的呢,请看下回分解。
后记
因为微信公众号是不能频繁修改文章内容的,所以我这里放一个说明链接,如果文章有错误或者是有出入,这里会显示:
http://apk.neters.club/api/Blog/GoMore?id=139
本文分享自 NetCore 从壹开始 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!