Docker部署.Net的WebAPI服务与Jenkins实现自动化部署+Gitee(基础的DevOps)
提示:自我记录,仅供参考
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
有问题可+v ThePeople577 解答
注意
Docker的源拉取失败的时候 ,要修改为国内的源,再次尝试运行
/etc/docker/daemon.json 文件内 没有就新建
{
“registry-mirrors”: [
“https://docker.hpcloud.cloud”,
“https://docker.m.daocloud.io”,
“https://docker.unsee.tech”,
“https://docker.1panel.live”,
“http://mirrors.ustc.edu.cn”,
“https://docker.chenby.cn”,
“http://mirror.azure.cn”,
“https://dockerpull.org”,
“https://dockerhub.icu”,
“https://hub.rat.dev”
]
}
//上面基本包含了一些常见的源提供。不满足自己加一下
配置完记得重启Docker
sudo systemctl restart docker
容器化部署
!!!!!!!!!这里的引号要改为英文的,发布的时候是英文的,显示的时候就是中文的了!!!!!!
提示:以下是本篇文章正文内容,下面可供参考
一、Docker安装
在CentOS 安装
//安装一些必要的工具,如yum - utils,它提供了yum - config - manager工具,并且安装device - mapper - persistent - data和lvm2用于存储驱动(可忽略)
sudo yum install -y yum-utils \
device - mapper - persistent - data \
lvm2
//使用yum - config - manager来设置 Docker 的稳定版存储库(可忽略)
sudo yum - config - manager \
--add - repo \
https://download.docker.com/linux/centos/docker - ce.repo
//安装
sudo yum install docker - ce docker - ce - cli containerd.io
//设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
//验证
sudo docker run hello - world
二、.net WebAPI项目生成docker 脚本,并部署
1.生成docker脚本
1、右键启动项,选择添加》docker支持
2、选择Linux,dockerfile。就会生成一个docker脚本文件,修改一下端口以外。基本上不用修改
3、在API同文件下创建一个脚本文件webapi.production
#!/bin/bash
docker ps -a | grep wpf_webapi | awk ‘{print $1}’ | xargs -r docker stop | xargs -r docker rm
docker build --rm -t duwenink/wpf_webapi:1.0.0 -f Dockerfile .
docker run -d --name wpf_webapi --restart=always --net host -v /home/logs:/app/logs duwenink/wpf_webapi:1.0.0
具体意思可以使用AI工具解读:
整体功能概述
这段脚本的主要目的是自动化地停止并删除名为 wpf_webapi 的 Docker 容器,然后重新构建一个新的 Docker 镜像,最后使用新构建的镜像启动一个名为 wpf_webapi 的新容器,并且设置该容器在各种情况下(包括 Docker 重启)都能自动重启。
4、将2个文件复制到外面一层。如图层
保存后,在服务器上拉取该项目代码即可
2、服务器上指定脚本,运行API服务
1、文件定位到脚本文件目录下,执行chmod +x [脚本名字]。将脚本改为可执行文件(会变色)
2、直接执行脚本文件即可。如图
输入docker ps查看运行情况
3、查看防火墙是否启动,没启动启动起来(所有操作基于 firewalld,如果使用的iptables软件不行)
sudo systemctl status firewalld 查看状态
sudo systemctl start firewalld 启动
打开对应端口
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
重启防火墙即可
sudo firewall-cmd --reload
查看占用端口的容器
docker ps | grep 8080
查看端口开启情况
sudo firewall-cmd --query-port=8080/tcp
查看所有被允许访问的端口
firewall-cmd --list-ports
3、补充
1、对于容器内时区的问题
在宿主机输入 date 获取时间,查看是否是东八区的时间
再进入容器内查看容器内时间,直接在Docker文件内设置
WORKDIR /app
# 设置语言环境为中文
ENV LANG=zh_CN.UTF-8 \
LC_ALL=zh_CN.UTF-8
# 设置时区为东八区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
三、jenkins
1、拉取Jenkins镜像
docker pull jenkins/jenkins:lts
2、创建jenkins数据卷(为了持久化)
docker volume create jenkins-data
3、创建jenkins脚本,并修改为可执行脚本执行
#!/bin/bash
定义 Git 私人令牌和用户名
GIT_TOKEN=“gitee的私人令牌”
GIT_USERNAME=“登录名”
停止并删除现有名为 jenkins 的容器
if [ $(docker ps -aqf “name=jenkins”) ]; then
docker stop jenkins
docker rm jenkins
fi
启动新的 jenkins 容器
docker run -d
-u root
-p 8080:8080
-p 50000:50000
-v jenkins-data:/var/jenkins_home
-v /var/run/docker.sock:/var/run/docker.sock
-v $(which docker):/usr/bin/docker
-v /home/wpf-demo-api:/home/wpf-demo-api \ #这里的映射目录注意得有.git文件。执行ls -a可查看(脚本内这一行注释去掉)
–name jenkins
jenkins/jenkins:lts
sleep 5
docker exec jenkins git config --global credential.helper ‘!f() { echo “username=‘ G I T U S E R N A M E ′ " ; e c h o " p a s s w o r d = ′ GIT_USERNAME'"; echo "password=' GITUSERNAME′";echo"password=′GIT_TOKEN’”; }; f’
chmod +X <脚本> 修改为可执行脚本文件
4、创建完成后 访问8080端口
进入服务器 查询密码
docker logs jenkins | grep “Please use the following password to proceed to installation:”
复制输入进网页后,安装推荐的插件即可(尽量全部安装成功再继续)
安装成功后创建用火即可。页面如下
5、与gitee结合自动化部署Docker的服务
1、先实现通过jenkins执行docker 内的执行脚本
1、新建一个任务 选择自由风格项目(FreeStyle project)
2、到里面后,下拉到下面 。选择新增的是执行 Shell后,在里面配置脚本。(脚本的执行可行性 可在服务器上进入jenkins内执行一遍,是否可以执行)。好了后就可以在jenkins里面手动执行版本发布
2、通过gitee提交关键字来触发任务构建
安装gitee插件
1、配置需要拉取的gitee库的凭证
这里注意,我使用的是gitee,需要到gitee里面生成我的私人令牌
2、在新增的凭证里面填写如下。选择Secret Text后。将对应的Token填写进Secret内即可
3、配置gitee 在系统管理》系统配置 往下拉到gitee。填写刚才加的令牌和相关信息。测试连接成功后即可绑定完成
4、在新建的任务里面,gitee下拉选择,选择刚才配置的文件
5、选择下面的触发构建。需要在Gitee仓库里面配置发送bhook。确保网络上你的git仓库可以访问到jenkins
源码管理这配置源码地址
选中后下面有生成webhook密码 生成后保存即可
6、在gitee里面选择仓库》管理》Webhooks。填入相关信息即可。点击更新不报错即可
7、在之前的shell语句修改为。其中添加了一个参数。来判断是git提交还是手动触发的。需要添加一个参数。截图图下
脚本如下:
#!/bin/bash
echo “MANUAL_TRIGGER 的值为: $MANUAL_TRIGGER”
检查 MANUAL_TRIGGER 参数的值
if [ “$MANUAL_TRIGGER” = “true” ]; then
echo “手动触发构建,直接开始”
cd /home/wpf-demo-api/
git pull
cd /home/wpf-demo-api/WpfDemoAPI/
./webapi.production
else
获取最新提交备注
commit_message=$(git log -1 --pretty=%B)
检查提交备注是否包含 publish 关键字
if echo "$commit_message" | grep -q "publish"; then
echo "提交备注包含 publish 关键字,开始构建"
cd /home/wpf-demo-api/
git pull
cd /home/wpf-demo-api/WpfDemoAPI/
./webapi.production
else
echo "提交备注不包含 publish 关键字,跳过构建"
exit 0
fi
echo “非手动触发,略过”
fi
注意:!!!所有脚本执行的语句必须可以在服务器上执行。出现报错或者无效什么的,要一个一个去排查。最好是去服务器上排查一遍
总结
个人总结,仅供参考