小知识:Gogs+Jenkins+Docker 自动化部署.NetCore的方法步骤

环境说明

腾讯云轻量服务器, 配置 1c 2g 6mb ,系统是 ubuntu 20.14,docker 和 jenkins 都在这台服务器上面, 群晖218+一台,gogs 在这台服务器上。

docker安装

卸载旧的 docker

?
1
sudo apt-get remove docker docker-engine docker.io containerd runc

更新 apt 包索引并安装包以允许 apt 通过 https 使用存储库

?
1
2
3
4
5
6
7
8
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release

添加 docker 官方的 gpg 密钥

?
1
curl -fssl https://download.docker.com/linux/ubuntu/gpg | sudo gpg –dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

安装 docker

?
1
sudo apt-get install docker-ce docker-ce-cli containerd.io

通过运行 hello-world 验证 docker 是否已正确安装。输出 hello from docker! 表示安装成功

?
1
sudo docker run hello-world

不同的系统安装方式可以查阅

gogs安装

gogs 是一款用 go 语言开发的轻量级极易搭建的自助 git 服务。 选择 gogs 主要因为它相对于 gitlab 动则几个g的内用暂用率来说轻太多了。gogs 会大大减低系统消耗,跑起来也就占用100mb内存。我的 gogs 是跑在群晖上面的,效果都是一样,都是在 docker 中托管

拉取 gogs 镜像

?
1
sudo docker pull gogs/gogs

创建 gogs 文件挂载路径

?
1
mkdir -p /var/gogs

启动容器 6022 是 https,6080 是 http,可以通过 docker ps 命令来查看是否启动成功。

?
1
docker run -d –name=my_gogs -p 6022:22 -p 6080:3000 -v /var/gogs:/data gogs/gogs

容器启动后通过 http://xxxxxxxx:6080 进行 gogs 的初始配置

%小知识:Gogs+Jenkins+Docker 自动化部署.NetCore的方法步骤-猿站网-插图

数据库类型建议选择 linux 自带的 sqlite3 ,支撑十几个人左右的团队使用足够了。域名填写 gogs 所在服务器的域名或者 ip 地址。http 端口号和容器内部端口一致,应用 url 填写访问 gogs 的域名端口或 ip 端口,点击安装后注册一个新用户登陆即可

%小知识:Gogs+Jenkins+Docker 自动化部署.NetCore的方法步骤-1猿站网-插图

gogs安装完成后新建一个 demo 仓库稍后使用

%小知识:Gogs+Jenkins+Docker 自动化部署.NetCore的方法步骤-2猿站网-插图

gogs 官方文档

docker中托管.netcore服务

新建一个 webapi 项目

%小知识:Gogs+Jenkins+Docker 自动化部署.NetCore的方法步骤-3猿站网-插图

项目中增加一个 dockerfile 文件并且简单配置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
# 指定依赖版本
from mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim
workdir /app
copy . /publish
workdir /publish
# 设置docker容器对外暴露端口
expose 80
# 设置时区
run /bin/cp /usr/share/zoneinfo/asia/shanghai /etc/localtime \
&& echo asia/shanghai >/etc/timezone
# 程序入口
entrypoint [“dotnet”, “demowebapi.dll”]

发布api服务,如果发布文件中没有 dockerfile 文件需要手动修改项目文件,发布成功后将发布文件 copy 到服务器指定的文件夹中

?
1
2
3
4
5
<itemgroup>
<none update=”dockerfile”>
<copytooutputdirectory>always</copytooutputdirectory>
</none>
</itemgroup>

进入服务器刚 copy 的发布文件根路径下,执行 docker build -t {repository}:{tag} . 命令 通过 dockerfile 来生成 docker 镜像文件,repository 是镜像的名字,tag 是标签。譬如 docker build -t demo:v1 .

%小知识:Gogs+Jenkins+Docker 自动化部署.NetCore的方法步骤-4猿站网-插图

%小知识:Gogs+Jenkins+Docker 自动化部署.NetCore的方法步骤-5猿站网-插图

通过 docker images 命令来查看生成的所有镜像

%小知识:Gogs+Jenkins+Docker 自动化部署.NetCore的方法步骤-6猿站网-插图

镜像生成成功后就可以通过镜像创建并运行容器了。执行 docker run –name demoapi -dp 5009:80/tcp demo:v1 命令创建并运行容器

-d:后台运行容器,并返回容器id;

-p:指定端口映射,格式为:主机(宿主)端口:容器端口,容器的端口就是你程序启动的端口,建议直接在项目中写死。

— name:容器名字

执行后可以通过 docker ps 查看所有运行起来的容器状态,需要查看所有容器可以使用 docker ps -a 命令

%小知识:Gogs+Jenkins+Docker 自动化部署.NetCore的方法步骤-7猿站网-插图

用 postman 测试一下是否部署成功了

%小知识:Gogs+Jenkins+Docker 自动化部署.NetCore的方法步骤-8猿站网-插图

列举一些docker常用命令

docker restart {容器id} #重启容器 docker start {容器id} #启动容器 docker attach {容器id} # 这样进入容器退出会导致容器也退出,attach 可以用户看容器的标准输出 docker attach {容器id} –sig-proxy=false # 加上参数不会导致同期退出 docker exec -it {容器id} /bin/bash # 进入容器需要在容器中执行命令需要使用 exec 命令 docker logs {容器id} -f # 跟踪日志输出 -f 跟踪日志输出 docker rm -f {容器id}# 删除已经停止的容器 docker rmi {repository:tag} # 删除指定镜像 docker image prune # 删除悬空镜像,也就是没有被容器引用的镜像

到这里服务已经在 docker 完成了托管,但是每次发布都需要 build 新的镜像,然后停止老的容器,在创建一个新的容器,无形中增加了工作量。jenkins 可以替我们完成这些工作

jenkins安装

jenkins 是依赖 java 的,所以需要安装 java 的 sdk,这里选择 java8

?
1
sudo apt-get install openjdk-8-jdk

安装 lts 版本的 jenkins

?
1
2
3
4
5
wget -q -o – https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add –
sudo sh -c echo deb https://pkg.jenkins.io/debian-stable binary/ > \
/etc/apt/sources.list.d/jenkins.list
sudo apt-get update
sudo apt-get install jenkins

查看运行状态 systemctl status jenkins 正常会输出如下内容

%小知识:Gogs+Jenkins+Docker 自动化部署.NetCore的方法步骤-9猿站网-插图

jenkins 默认端口是 8080,安装成功后通过 http://xxxx:8080 即可访问,第一步需要先解锁,管理员密码会在安装成功后输出,也可以通过命令 cat /var/lib/jenkins/secrets/initialadminpassword

%小知识:Gogs+Jenkins+Docker 自动化部署.NetCore的方法步骤-10猿站网-插图

输入密码后进入初始化页面,选择安装推荐插件

%小知识:Gogs+Jenkins+Docker 自动化部署.NetCore的方法步骤-11猿站网-插图

插件安装进度,需要一些些时间

%小知识:Gogs+Jenkins+Docker 自动化部署.NetCore的方法步骤-12猿站网-插图

结束后创建管理账号登录即可,进入系统管理,选择插件管理,搜索gogs插件后安装。

%小知识:Gogs+Jenkins+Docker 自动化部署.NetCore的方法步骤-13猿站网-插图

安装后需要重启一下 jenkins,访问链接 http://xxxx:8080/restart 后点击重启,或者通过执行 service jenkins restart 重启

%小知识:Gogs+Jenkins+Docker 自动化部署.NetCore的方法步骤-14猿站网-插图

为了方便执行脚本,需要让 jenkins 以 root 用户来运行,编辑文件 vim /etc/sysconfig/jenkins 或 vim /etc/default/jenkins 取消 jenkins_user 注释,并把值设置成 jenkins_user=”root” 后修改文件夹权限

?
1
2
3
chown -r root:root /var/lib/jenkins
chown -r root:root /var/cache/jenkins
chown -r root:root /var/log/jenkins

jenkins 常用操作

启动 service jenkins start 重启 service jenkins restart 或访问 http://xxxx:8080/restart 停止 service jenkins stop 或访问 http://xxxx:8080/exit 重新加载配置文件 http://xxxx:8080/reload

使用jenkins自动化

因为需要在服务器上 build 项目,所以需要安装 .netcore 环境,可以查阅 自行安装

把新建的项目推送到 gogs 仓库中后点击仓库高级设置

%小知识:Gogs+Jenkins+Docker 自动化部署.NetCore的方法步骤-15猿站网-插图

选择 web 钩子,添加新 gogs 的 web 钩子

%小知识:Gogs+Jenkins+Docker 自动化部署.NetCore的方法步骤-16猿站网-插图

配置 web 钩子,推送地址前面是 jenkins 的访问链接,后面 job 名字可以自己定义,选择只有在 push 的时候触发钩子,也可以自己选定事件

%小知识:Gogs+Jenkins+Docker 自动化部署.NetCore的方法步骤-17猿站网-插图

添加后重新点击管理 web 钩子,选择刚才新建的钩子,点击测试推送来验证是否正常,抛出的异常如果是 job 未定义说明钩子是正常的,如果是其他的异常可以查看推送地址是否正确,以及 jenkins 上的 gogs 插件是否正确安装

%小知识:Gogs+Jenkins+Docker 自动化部署.NetCore的方法步骤-18猿站网-插图

回到 jenkins 页面,新建一个任务,任务名就是之前 gogs 里面的 job 名字,选择构建自由风格的软件项目

%小知识:Gogs+Jenkins+Docker 自动化部署.NetCore的方法步骤-19猿站网-插图

添加仓库配置,repository url 是你的仓库地址,点击添加你的仓库凭据信息,最后指定操作的分支

%小知识:Gogs+Jenkins+Docker 自动化部署.NetCore的方法步骤-20猿站网-插图

构建选择执行shell脚本,脚本也可以放在服务器上这里调用就行,为了方便就直接写在这里

%小知识:Gogs+Jenkins+Docker 自动化部署.NetCore的方法步骤-21猿站网-插图

%小知识:Gogs+Jenkins+Docker 自动化部署.NetCore的方法步骤-22猿站网-插图

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 判断是否存在demo镜像是否存在
docker images | grep demo &> /dev/null
if [ $? -ne 0 ]
then
# 不存在不做处理
echo “not existed demo”
else
# 如果镜像存在默认认为容器也是在运行状态
echo “existed demo”
# 停止删除容器和镜像
docker stop demoapi
docker rm -f demoapi
docker rmi demo:v1
fi
# 重新build后生成镜像并运行容器
cd demowebapi/
# 发布到到指定路径
dotnet publish -c release -o /publish
# 进入路径生成镜像后启动容器
cd /publish
docker build -t demo:v1 .
docker run –name demoapi -dp 5009:80/tcp demo:v1

保存后点击立即构建验证一下,如果构建失败可以在控制台输出中查看详细构建过程和错误信息

%小知识:Gogs+Jenkins+Docker 自动化部署.NetCore的方法步骤-23猿站网-插图

回到 gogs 的管理 web 钩子页面重新推送,成功后 jenkins 会自动构建发布,之后只要 push 到 master 分支就会自动发布

%小知识:Gogs+Jenkins+Docker 自动化部署.NetCore的方法步骤-24猿站网-插图

%小知识:Gogs+Jenkins+Docker 自动化部署.NetCore的方法步骤-25猿站网-插图

总结

简单记录了自己折腾的全过程,jenkins 和 docker 还有很多功能,要在使用过程中慢慢了解。

到此这篇关于gogs+jenkins+docker 自动化部署.netcore的方法步骤的文章就介绍到这了,更多相关docker 自动化部署.netcore内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://www.cnblogs.com/linhuiy/p/14943788.html

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:解决vscode docker插件docker.socket权限问题

2023-3-20 14:37:43

建站知识

小知识:Zabbix由浅入深之监控Docker(基础篇)

2023-3-20 14:52:34

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索