使用Docker安装Jenkins和使用Jenkins来发布和代理.NetCore项目

本文仅作为学习笔记以及本人实践操作步骤,部分内容节选自博客园其他大佬O(∩_∩)O!

一.不使用宿主机的Docker构建jenkins镜像

1.宿主机安装Docker(如果宿主机已经安装,请跳过此步骤)

//更新系统 
sudo yum update
#step1 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
#step2 添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#step3 缓存并安装docker-ce
sudo yum makecache fast
sudo yum -y install docker-ce
#step4 开启docker服务
sudo service docker start
#step5 设置docker开机自启动
systemctl enable docker
#step6 启动Docker
systemctl start docker
#step7 查看版本
docker --version
使用Docker安装Jenkins和使用Jenkins来发布和代理.NetCore项目

2.安装jenkins服务

如果我们使用Docker镜像的话,可以直接Search下,可以看到有很多的镜像文件,

docker search jenkins

使用Docker安装Jenkins和使用Jenkins来发布和代理.NetCore项目

 

 

 其中第一个和第二个其实都是官方的,但是第一个已经不维护了,我们一般都是使用的第二个。这里有一个问题要先思考下,如果用镜像的方案的话,那如何在这个Jenkins容器里使用docker来构建我们的dotnet镜像?这个需要好好的想想,如果你的aspnetcore程序打算使用docker容器化的话,以下这个方案不一定是最终的方案,但是普通的dotnet xxx.dll的这种普通发布模式肯定是可以的,

可能有人会问为什么这个jenkins容器里不能使用docker来打包我们的服务呢?原因在于:创建的容器不能操作和使用宿主机的docker,导致我们无法在Jenkins服务中去使用docker命令去构建asp.netcore项目镜像。因为jenkins官方镜像本身是不带dotnetcore环境和docker环境的,所以我们需要先手动制作一个包含dotnet环境的jenkins的docker的container。

首先那我们在一个空的文件夹里,创建一个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 .
使用Docker安装Jenkins和使用Jenkins来发布和代理.NetCore项目

 

 

下面生成容器实例:

//创建工作目录 
mkdir /root/jenkins_home

//赋予权限 
chown -R 1000 /root/jenkins_home
docker run -d --name jenkins_01 -p 3033:8080 -v /root/jenkins_home:/home/jenkins_01 my-docker-jenk
使用Docker安装Jenkins和使用Jenkins来发布和代理.NetCore项目

Jenkins默认的开放容器端口是8080和50000,但是你可以自定义宿主机的监听端口,比如我 这里开放的是3033端口

安装弯沉后会有一个让我们寻找密码的操作:

使用Docker安装Jenkins和使用Jenkins来发布和代理.NetCore项目

// 进入容器 
docker exec -it jenkins_01 bash 
// 查看密码 
cat /var/jenkins_home/secrets/initialAdminPassword

进入后悔提示有一个安装插件的过程,然后选择安装推荐的插件就行

使用Docker安装Jenkins和使用Jenkins来发布和代理.NetCore项目

中间还有一系列的操作我直接略过。。。最终界面如下

使用Docker安装Jenkins和使用Jenkins来发布和代理.NetCore项目

 

 3.测试Helloword

3.1 创建*风格的软件项目

使用Docker安装Jenkins和使用Jenkins来发布和代理.NetCore项目

 

 3.2 添加源代码管理

使用Docker安装Jenkins和使用Jenkins来发布和代理.NetCore项目

 

 3.3 构建命令

使用Docker安装Jenkins和使用Jenkins来发布和代理.NetCore项目

 

 3.4 点击立即构建

构建成功后查看控制台文件使用Docker安装Jenkins和使用Jenkins来发布和代理.NetCore项目使用Docker安装Jenkins和使用Jenkins来发布和代理.NetCore项目

 

 但是这样的一个问题就是  我们没法再jenkins容器里面使用docker,这样就不能使用docker打包我们发布的dotnetcore程序了,这个就是我们刚开始提出来的问题,下面第二部分我们将从另外一个方向安装jenkins

使用Docker安装Jenkins和使用Jenkins来发布和代理.NetCore项目

 二.使用宿主机的docker来构建我们的jenkins镜像和在jenkins内部打包.netcore程序

还是上面的镜像文件,只不过这次启动容器实例的命令不一样了,如下

docker run -u root --rm -d -p 3033:8080 --name jenkins2 \
-v /usr/bin/docker:/usr/bin/docker \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /home/jenkins_home:/var/jenkins_home \
my-docker-jenk 

第一行表示启动一个容器名为Jenkins2的对外开放3033端口实例。

第二行表示将宿主机上面的docker命令行工具挂载到容器中,使jenkins用户能够执行docker命令。

第三行表示将宿主机上的docker.sock挂载到容器中的相应位置,使得容器中的dockercli能跟宿主机的docker通信。

第四行表示挂载我们创建的配置文件存放目录到指定的文件夹。

生成成功后的容器实例:

使用Docker安装Jenkins和使用Jenkins来发布和代理.NetCore项目

 

 进入jenkins2容器查看docker和dotnet是否正常

使用Docker安装Jenkins和使用Jenkins来发布和代理.NetCore项目

 

 可以看到 dotnet sdk和docker都正常。

然后输入命令查看密码:

docker exec jenkins2 cat /var/jenkins_home/secrets/initialAdminPassword
使用Docker安装Jenkins和使用Jenkins来发布和代理.NetCore项目

使用Docker安装Jenkins和使用Jenkins来发布和代理.NetCore项目

 

后续的操作和上面基本一致:

构建shell脚本如下:

dotnet restore
dotnet build 
cd HelloWorldPrj 
dotnet publish 
echo "Successfully!!!! ^ please see the file ."
cd bin/Debug/netcoreapp3.1/publish/

docker stop helloworldcontainer
docker rm helloworldcontainer
docker rmi hello-world-docjek
docker build -t hello-world-docjek .
docker run --name helloworldcontainer -p 5055:80 -d hello-world-docjek

每次构建都是先删掉容器和镜像,重新生成。

执行成功的控制台:

使用Docker安装Jenkins和使用Jenkins来发布和代理.NetCore项目

 

 然后在宿主机的docker也能查看到启动的容器实例:

使用Docker安装Jenkins和使用Jenkins来发布和代理.NetCore项目

 

 使用Docker安装Jenkins和使用Jenkins来发布和代理.NetCore项目

 

上一篇:linux部署netcore


下一篇:.NetCore AOP