ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-08-25 01:03:17  阅读:214  来源: 互联网

标签:容器 NetCore 宿主机 microsoft jenkins dotnet Jenkins Docker docker


本文仅作为学习笔记以及本人实践操作步骤,部分内容节选自博客园其他大佬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

2.安装jenkins服务

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

docker search jenkins

 

 

 其中第一个和第二个其实都是官方的,但是第一个已经不维护了,我们一般都是使用的第二个。这里有一个问题要先思考下,如果用镜像的方案的话,那如何在这个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 .

 

 

下面生成容器实例:

//创建工作目录 
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

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

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

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

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

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

 

 3.测试Helloword

3.1 创建自由风格的软件项目

 

 3.2 添加源代码管理

 

 3.3 构建命令

 

 3.4 点击立即构建

构建成功后查看控制台文件

 

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

 二.使用宿主机的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通信。

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

生成成功后的容器实例:

 

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

 

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

然后输入命令查看密码:

docker exec jenkins2 cat /var/jenkins_home/secrets/initialAdminPassword

 

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

构建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也能查看到启动的容器实例:

 

 

 

标签:容器,NetCore,宿主机,microsoft,jenkins,dotnet,Jenkins,Docker,docker
来源: https://www.cnblogs.com/helloworld-wang/p/15183167.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有