Session

docker + jenkins 部署DotNetcore webapi

电脑版发表于:2023/7/11 19:56

前言

 docker + jenkins 部署DotNetcore webapi

实现自动化部署

 前言:
所谓自动化部署,实际上就是让jenkins 去监听  svn/git 上的代码版本变化。如果代码版本发生了变化,那么将会自动拉取代码,并且执行你所配置的shell 脚本。实现自动化部署。
所以在此之前,你必须得先使用dockerfile 将自己的项目 重新编译,并打包,然后运行在镜像中。这一系列操作都在dockerfile 中进行。

第一步

在自己服务器中下载docker,因为需要借助docker 来进行项目的运行

使用命令

yum install docker


第二步

在docker 中安装jenkins

这一点需要注意,
1.jenkins 是运行在容器中的,想要在容器内执行docker命令 ,必须得将docker 相关文件夹映射出来,否则在jenkins中执行docker 命令将会找不到命令
2.jenkins 的版本需要装新版本,旧版本的镜像会导致很多所需要的 插件下载不下来。提示版本jenkins 版本过低
3.将 容器内的时区调整,否者 在jenkins 中的时间与服务器时间对应不上,导致不会按预期自动构建

下边一次来安装jenkins 并配置

使用命令下载jenkins(手动选择下载版本)
如何查看最新版: https://www.jenkins.io/changelog/      在这个网址查看jenkins 的更新记录

docker pull jenkins/jenkins:2.413



镜像下载完成之后,创建文件夹映射目录(将关键文件映射到宿主机)
我建立了一个jenkins文件夹,用来存放jenkins的配置文件


授予文件夹权限,docker权限(可读可写可执行)

chmod 777 /home/zwf/jenkins
chmod 777 /var/run/docker.sock


//如果需要执行docker compose。请先执行

find / -name 'docker-compose' 2>/dev/null


赋予docker compose 的权限

chmod 777 /usr/libexec/docker/cli-plugins/docker-compose





检查修改时区
使用命令:: timedatectl  查看时区



如果是国外,先修改时区(修改为上海)

rm -f /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

然后再查看时区



现在就可以运行容器了(注意将docker 文件夹挂载到容器上,时区也需要一并挂载)

docker run -d -p 8099:8080  --privileged=true -v /home/zwf/jenkins:/var/jenkins_home -v /etc/localtime:/etc/localtime  -v /usr/bin/docker:/bin/docker -v /var/run/docker.sock:/var/run/docker.sock  --name myjenkins jenkins/jenkins:2.413

//如果需要dockercompose ,需要将docker compose 也挂载到jenkin中

docker run -d -p 8099:8080  --privileged=true -v /home/maoyuan/jenkins:/var/jenkins_home -v /etc/localtime:/etc/localtime  -v /usr/bin/docker:/bin/docker -v /var/run/docker.sock:/var/run/docker.sock   -v /usr/libexec/docker/cli-plugins/docker-compose:/usr/libexec/docker/cli-plugins/docker-compose --name myjenkins jenkins/jenkins:2.413


说明:


privileged=true --授予容器管理员权限

-v /etc/localtime:/etc/localtime -- 将时区映射进入容器

-v /usr/local/jenkins:/var/jenkins_home --映射jenkins目录


-v /usr/bin/docker:/bin/docker --映射docke目录 到时候需要在容器里执行docker命令


-v /var/run/docker.sock:/var/run/docker.sock --映射docker执行命令 到时候需要容器里执行docker命令。


执行之后查看jenkins 是否启动成功,启动成功后访问 8099端口 查看jenkins

然后修改jenkins 的镜像加速

在jenkins 映射的配置文件中,也就是我上边挂载的 /home/zwf/jenkins 文件夹中,修改hudson.model.UpdateCenter.xml里的内容。
把URL 修改为: https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

配置jenkins ,访问jenkins 页面


打开对应路径下的文件,直接将密码复制粘贴上,点击继续

点击安装推荐的插件



然后就进入到了主页面

第三步

使用jenkins 拉取代码

svn/git 代码拉取方式差不多,因为我公司现在使用的是svn ,所以我以svn 为例
新建一个自由风的项目



查看源码管理



如果没有svn 那么去插件管理搜索然后下载安装就行



点击添加你的svn 用户,jenkins 会使用此账户拉取代码

下边配置 check-out strategy 中选择这个

暂时只配置到这里,点击应用。保存后点击立即构建,将会把代码拉取到jenkins 工作空间中






第四步

工作空间的目录结构是这样的,那么
在我代码同样的目录结构中,执行dockerfile 文件编译生成项目。这一步比较麻烦


首先在本机打开命令窗口,跳转到指定路径



我的dockerfile是存放在config文件夹中的,所以
得在这个页面能够成功执行dockerfile,并重新编译,生成镜像。
本机先编译一下试试,能重新编译,并且生成镜像才放到jenkins 中执行
我的dockerfile 是这样的



确保自己的项目能够重新编译,并且生成镜像后就可以类编写jenkins的shell 脚本了

编写jenkins 的shell脚本


echo application build  
docker build -f ./config/Dockerfile -t webapi:$SVN_REVISION .

echo Removing old container
docker stop webapi
docker rm webapi
echo Removing old Image
docker rmi $(docker images -f "dangling=true" -q)
echo  container build 
docker run -d -p 8500:80 -v  /home/zwf/config:/app/config/ -v /home/zwf/file:/app/File --name webapi webapi:$SVN_REVISION
docker images | grep webapi | sort -r | awk 'NR>1 {print $3}' | xargs docker rmi -f
echo successful

这句代表将会清除旧的镜像,只保留最新的,如果需要保留旧镜像,就不要加这一句 webapi 为你的镜像名
docker images | grep webapi | sort -r | awk 'NR>1 {print $3}' | xargs docker rmi -f

这仅供参考,结合实际项目选择需要挂载的文件,以及其他配置

在构建触发器中设置 轮询SCM (也就是每隔一段时间去校验版本,如果有新版本,那么会触发构建),我配置为一分钟,也就是每分钟都去看看有没有新版本,有就自动拉取代码并执行配置的 shell
用来达到自动化构建项目的效果

构建记录




关于TNBLOG
TNBLOG,技术分享。技术交流:群号677373950
ICP备案 :渝ICP备18016597号-1
App store Android
精彩评论
{{item.replyName}}
{{item.content}}
{{item.time}}
{{subpj.replyName}}
@{{subpj.beReplyName}}{{subpj.content}}
{{subpj.time}}
猜你喜欢