


前言
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 /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 拉取代码
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
用来达到自动化构建项目的效果
构建记录