cover_image

【CI/CD系列】使用Docker安装Jenkins

老张的哲学 MVP BCVP代码创新社
2020年08月24日 23:51

  图片

图片
今天这篇【跨平台】系列的第四章节,在之前的文章或视频中,已经对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 SDKUSER 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 3RUN apt-get updateRUN 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.qpgRUN curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpgRUN mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpgRUN 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 frameworkRUN apt-get updateRUN 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

Docker容器化 · 目录
上一篇[跨平台系列三Docker篇]:ASP.NET Core应用下一篇使用Jenkins来发布和代理.NetCore项目
修改于2020年08月25日
继续滑动看下一个
BCVP代码创新社
向上滑动看下一个