0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Flexus X 实例 Docker+Jenkins+gitee 实现 CICD 自动化部署 - 解放你的双手~

jf_94205927 来源:jf_94205927 作者:jf_94205927 2024-12-26 18:19 次阅读

前言

828 B2B 企业节特惠来袭,Flexus X 实例引领自动化部署新纪元!Docker 携手 Jenkins 与 Gitee,共创 CICD 无限可能!在快速迭代的数字时代,我们自豪地推出这一前沿解决方案,为您的 C# Web API 项目注入前所未有的敏捷动力。通过集成 Docker 容器化威廉希尔官方网站 、Jenkins 持续集成/持续部署(CICD)平台,以及 Gitee 高效版本控制系统,我们旨在打造一个无缝衔接的开发到部署流水线,让您的项目在数字化转型的浪潮中乘风破浪,遥遥领先!

一个高度自动化的环境,每一次代码提交都能触发自动化的构建、测试与部署流程。在这个流程中,Docker 确保了应用运行环境的标准化与一致性,无论本地开发还是云端部署,都能享受到“所见即所得”的便捷;Jenkins 作为强大的 CICD 引擎,自动化地管理着整个流程,从代码拉取、编译构建到部署发布,每一步都精准无误;而 Gitee,作为您的代码仓库,不仅提供了安全的版本控制服务,还通过集成 Jenkins 触发器,实现了代码变更与部署流程的即时联动。

本实践指南将带您深入探索 Docker+Jenkins+Gitee 的完美结合,一步步构建起一套高效、可靠的 CICD 自动化部署体系。您将学会如何配置 Jenkins 以监听 Gitee 的 Webhooks,实现代码提交的即时响应;如何利用 Docker 容器快速打包并运行您的 C# Web API 应用;以及如何通过 Jenkins 脚本化地管理整个部署流程,包括环境配置、依赖安装、测试执行与部署发布等关键环节。

实验步骤

环境准备

本实验沿用了上一个实验,环境是 Flexus X 实例自定义模式,使用了 4vCPUs | 12GiB,镜像是最高版本的 ubuntu,在上一个实验中使用 xshell 连接了服务器,随后在服务器中安装了 git、dokcer。这里就不重复介绍了,可自行操作或参考上一个实验!

828华为云征文|Flexus X实例C#/.Net Core 结合(git代码管理、docker自定义镜像)快速发布部署-让你的项目飞起来~-CSDN博客

安装 Portainer

介绍:

Portainer 是一款开源的轻量级管理 UI,旨在简化 Docker 和 Kubernetes 环境的管理。Portainer 提供了状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm 集群和服务的集中管理和操作等功能。这些功能基本能满足中小型单位对容器管理的全部需求。

拉取镜像

使用 Docker 命令拉取 Portainer 的 Docker 镜像:

docker pull portainer/portainer-ce

wKgZO2dtLVmAbhWoAAAeyH5wNJ4192.png

拉取镜像报错了!!!在尝试从 Docker 镜像仓库(如 Docker Hub)获取镜像时遇到了问题。我们可能需要配置 Docker 以使用国内的镜像源,因为直接访问 Docker Hub 有时可能会很慢或不稳定

更换镜像源

Linux 系统中,Docker 的配置文件通常位于/etc/docker/daemon.json。如果该文件不存在,则需要手动创建。

wKgZPGdtLWCATPgoAAAzNDtz5xg885.png

从查询结果来看,我目前并没有这个文件,下面我自己创建一个!

// 创建文件 cd etc/dockertouch daemon.json //编辑文件 vim daemon.json// 在文件中输入以下内容 注意:刚打开文件要输入 i 才可以进入编辑模式{"registry-mirrors": ["https://gallery.ecr.aws/","https://gitverse.ru/docs/artifactory/gitverse-registry/","https://docker.lmirror.top","https://atomhub.openatom.cn/"]}// 退出编辑模式,从插入模式回到普通模式,只需要按下 Esc 键// 退出 Vim// 修改完成后我们需要完全退出 Vim 编辑器,可以使用以下命令::q //如果没有做任何修改,则退出 Vim。:q! //强制退出 Vim,不保存任何修改。:wq 或 :x //保存修改并退出 Vim。:ZZ //和 :wq 一样,保存修改并退出 Vim,但更简短。

接下来我们重启 docker 服务

[root@localhost]# systemctl daemon-reload[root@localhost]# systemctl restart docker

再次拉取 Portainer 的 Docker 镜像,此时已经可以正常拉取了!

wKgZO2dtLYiAXz2jAAFffsHZfyU777.png

启动容器

执行下面命令运行 Portainer 容器

docker run -d -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker/volumes:/var/lib/docker/volumes portainer/portainer-ce

运行容器后,去华为服务器控制台开放我们的 9000 端口

wKgZPGdtLYmACyLHAAF3cgWv5yA293.png

使用我们的服务器 IP 地址+端口号,访问可视化界面,第一次访问需要配置账号密码

wKgZO2dtLYmAMOJFAADfDoQBbxE557.png

点击 LiveConnect 打开本地 docker,可以查看宿主机配置信息、查看容器、镜像、网络、卷等相关信息。

wKgZPGdtLYmAfnUyAAKluwJkHLs294.png

安装 jenkins

介绍:

Jenkins 是一个开源的持续集成和持续部署(CI/CD)工具,它支持各种编程语言和平台,广泛应用于软件开发和交付过程中。Jenkins 可以监视源代码仓库(如 Git、SVN 等)的变化,并在代码提交后自动执行构建过程,包括编译、测试和打包等步骤。

拉取镜像

使用 docker pull jenkins/jenkins:lts 命令拉取 Jenkins 的长期支持(LTS)版本镜像

运行容器

# 在宿主机上创建一个目录,用于存放 Jenkins 的数据 mkdir -p /var/jenkins_home# 为了确保 Jenkins 容器能够正常访问该目录,需要设置适当的权限 chmod 777 /var/jenkins_home# 启动容器 docker run -d --name myjenkins -p 8080:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock --restart=always jenkins/jenkins:lts# 参数说明:-d:以后台模式运行容器。--name myjenkins:为容器指定一个名称。-p 8080:8080:将容器的 8080 端口映射到宿主机的 8080 端口,用于访问 Jenkins 的 Web 界面。-p 50000:50000:将容器的 50000 端口映射到宿主机的 50000 端口,用于 Jenkins 的节点和主控节点之间的通信。-v /var/jenkins_home:/var/jenkins_home:将宿主机的/var/jenkins_home 目录挂载到容器的/var/jenkins_home 目录,用于持久化 Jenkins 的数据。-v /etc/localtime:/etc/localtime:将宿主机的时区文件挂载到容器内,确保容器内的时间与宿主机一致。-v /usr/bin/docker:/usr/bin/docker 和 -v /var/run/docker.sock:/var/run/docker.sock:允许容器内的 Jenkins 使用宿主机的 Docker 命令和 Docker 引擎。--restart=always:设置容器在退出时总是自动重启。

执行完后使用 docker ps 命令查看正在运行的容器列表,确认 Jenkins 容器已经启动。

老样子,开放 8080 端口,ip+端口访问页面!

wKgZO2dtLYmASTSnAAFOzERwMB4249.png

获取管理员密码

第一次访问需要输入管理员密码,我们有两种方法可以获取到密码!

1.查看日志

使用 docker logs myjenkins 命令查看 Jenkins 容器的输出日志,找到包含管理员密码的行。

2.直接查看文件

也可以在宿主机的/var/jenkins_home/secrets/initialAdminPassword 文件中找到管理员密码。

wKgZPGdtLYqAMSj7AAEaA3Uwswk617.png

这里我直接打开刚刚安装的 portainer 界面,找到容器,点击日志图标!

wKgZO2dtLYqAO443AAFp2dgx6Rc778.png

如下所示 Please use the following password to proceed to installation:的下面一行就是密码!

wKgZPGdtLYqAF880AAUhmRBNROg185.png

选择安装建议安装的插件!

wKgZO2dtLYuAMe-UAAHBNk5DLKM584.png

安装插件需要等待一会~~~

wKgZPGdtLYuAYXqtAAFl9ANLcJg812.png

安装完成后系统提示我们创建一个新用户,这里我选择使用 admin 用户继续!

wKgZO2dtLYuAWuu1AAEiSBMi8bM575.png

在设置中安装 Gitee 插件

wKgZPGdtLYuAL3xjAAER2bOrFFs770.png

点击 New Item 创建一个新任务!

wKgZO2dtLYyAXgkfAAEDIiXqih4742.png

新建流水线项目

Portainer 配置

然后选择第一种任务模式,自由风格软件项目

wKgZPGdtLYyAVoO7AAI6-of7Sqs601.png

在源代码管理 Source Code Management 中选择 Git,打开 gitee 找到自己需要部署的仓库,复制地址。

wKgZO2dtLY2ADmACAAL8iL0mVRg405.png

粘贴到 Repository URL 中,第一次创建 Credentials 是空的,我们点击下面的 add 新建一个,

wKgZPGdtLY-AH3hNAADzEDsfCMg020.png

新建 Credentials 时我们只需要填写 Username 和 Password,其他空着就好!

wKgZO2dtLY-ADIvNAADPPj4wcOo631.png

username 就是刚刚打开 gitee 项目时如下图框框位置,然后 password 官方是建议使用私人令牌的,直接点击蓝色字体参考步骤生成私人令牌复制过来就好了!

wKgZPGdtLY-AC2QiAAE6Ni_rrkM781.png

Branches to build 选择你当前仓库要构建的分支,我这里默认是 master 分支

wKgZO2dtLZCAJjQKAADOWPsD9rc069.png

在这里可以选择远程触发构建,代码变更构建,定时构建等等,我这里选择的是 Build when a change is pushed to Gitee,当 gitee 上的代码发送推送时触发构建!

wKgZPGdtLZCAOKwjAADlugnwWRg336.png

勾选之后,滑到下面,点击 Generate,会生成一条密码。注意(这里的上图的 Webhook 和下面生成的密码都要记录下来,稍后我们要配置到 gitee 上)

wKgZO2dtLZCAcFpnAAA8fHFx_LU336.png

Build Environment 中我们勾选第一个,每次构建前删除之前的工作区,以节省内存。

wKgZPGdtLZCAHIzPAAAkZLs0K3Y608.png

在 Build Steps 中我们选择新增一个 Execute shell,编写命令来管理容器和镜像。

wKgZO2dtLZGAZg5qAACcC685Xno539.png

输入如下代码!

wKgZPGdtLZGAd2JlAAFJHVV_5L0887.png

下面是对代码的解释,可以根据自己的项目差异进行调整!

# 将当前工作目录更改为 Jenkins 的一个特定工作空间 cd /var/lib/jenkins/workspace/auth_server# 强制删除所有已停止的 Docker 容器 docker container prune -f# 列出所有 Docker 容器(包括未运行的),然后通过管道 (|) 将输出传递给 grep "auth"docker container ls -a | grep "auth" if [ $? -eq 0 ];then # 如果存在名为 auth 的容器,并且该容器正在运行,这条命令将停止该容器。docker container stop auth # 这条命令删除名为 auth 的容器docker container rm auth fi# 强制删除所有未使用的 Docker 镜像 docker image prune -f# 构建一个新的 Docker 镜像 docker build -t auth .# 启动容器 docker run -d -p 5000:5000 --restart=always --name auth auth

gitee 配置 WebHooks

打开代码仓库,在管理中找到 WebHooks,点击添加 WebHook

wKgZO2dtLZGAE7NHAAEeQC8ljlw728.png

将上面 Jenkins 项目设置中的 Gitee webhook URL 和 Gitee Webhook 密码复制下来,填进去!

wKgZPGdtLZKABXm-AAIpI3G6JMo787.png

注意:因为 Gitee 中的 bug,就算配置成功了,测试 WebHook 也会出现 404 错误,不要着急,稍后我们去修改一下代码提交一次!

构建

修改完配置之后,我们先手动进行构建一次,测试一下,点击项目中的 build Now。

wKgZO2dtLZKAEWc_AAIO6c4lWME629.png

在下面会出现每一次的构建记录,点击最新的一次,再点击 Console Output,可以查看我们的构建日志。由下图可见,我此次构建失败了!!!

wKgZPGdtLZKAe0PGAAK-zZEjECI142.png

从报错信息看出,这个错误信息表示在执行 Jenkins 构建任务时,尝试连接到 Docker 守护进程的 Unix 套接字(/var/run/docker.sock)时遇到了权限问题。因此,构建任务失败。

要解决这个问题,需要确保 Jenkins 用户具有访问 Docker 守护进程的权限。

wKgZO2dtLZOAcoNoAABxF-7YpIM877.png

打开终端并输入以下命令以创建名为'jenkins' 的用户

sudo adduser jenkins

将'jenkins' 用户添加到 'docker' 组

sudo usermod -a -G docker jenkins

在编辑完成后,需要重新加载 systemd 配置以使更改生效。运行以下命令:

sudo systemctl daemon-reload

重启 Docker 服务以应用新的配置:

sudo systemctl restart docker

如果上述方法不起作用,可以尝试更改/var/run/docker.sock 的权限,使其对所有用户可读写。执行以下命令:

sudo chmod 666 /var/run/docker.sock

请注意,这种方法可能会带来安全风险,因为它允许所有用户访问 Docker 守护进程。在生产环境中,建议仅将特定用户添加到 docker 用户组。

构建成功!

wKgZPGdtLZOAB2giAAIbJjykbbI722.png

打开 Portainer 看一下,虽然容器与宿主机映射的是 5000 端口,但其实因为我们没有给.net 项目配置端口,实际上默认还是 8080,这样会与 jenkins 的默认端口冲突,因此我们修改一下代码!

wKgZO2dtLZOARt6EAACoONyhtDU868.png

wKgZPGdtLZOAYU2PAAAO97MQU2I445.png

修改代码,自动部署

在 appsetting 中加入配置,提交代码!

"Kestrel": {"EndPoints": {"Http": {"Url": "http://+:5000"}}}

因为我们之前已经配置好了,在代码提交之后,会自动发送一个请求到我们的 jenkins

wKgZPGdtLYCAPAF-AAC-2ZzAUYM478.png

然后 jenkins 就会自动开启构建任务了

wKgZO2dtLXmASx1RAABDIZ_m3HQ793.png

老样子,开放 5000 端口!

wKgZPGdtLXGAOgkoAAB4kbVfQOU893.png

访问一下我们的接口,成功!

wKgZPGdtLWuAA2MzAAAy_x6eUXo057.png



审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开源
    +关注

    关注

    3

    文章

    3363

    浏览量

    42538
  • 华为云
    +关注

    关注

    3

    文章

    2566

    浏览量

    17461
收藏 人收藏

    评论

    相关推荐

    华为云 Flexus X 实例 docker 部署 Rocket.Chat 构建属于自己的团队通讯协作平台

    · 华为云最近正在举办 828 B2B 企业节,Flexus X 实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果有自建 MySQL、Redis、Nginx 等服务
    的头像 发表于 01-03 09:26 93次阅读
    华为云 <b class='flag-5'>Flexus</b> <b class='flag-5'>X</b> <b class='flag-5'>实例</b> <b class='flag-5'>docker</b> <b class='flag-5'>部署</b> Rocket.Chat 构建属于自己的团队通讯协作平台

    华为云 Flexus X 实例 docker 部署 ERPnext 构建属于自己的企业资源规划系统

    · 华为云最近正在举办 828 B2B 企业节,Flexus X 实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果有自建 MySQL、Redis、Nginx 等服务
    的头像 发表于 01-03 09:24 83次阅读
    华为云 <b class='flag-5'>Flexus</b> <b class='flag-5'>X</b> <b class='flag-5'>实例</b> <b class='flag-5'>docker</b> <b class='flag-5'>部署</b> ERPnext 构建属于自己的企业资源规划系统

    华为云 Flexus X 实例 docker 部署 rancher 并构建 k8s 集群

    · 华为云最近正在举办 828 B2B 企业节,Flexus X 实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果有自建 MySQL、Redis、Nginx 等服务
    的头像 发表于 01-02 13:44 41次阅读
    华为云 <b class='flag-5'>Flexus</b> <b class='flag-5'>X</b> <b class='flag-5'>实例</b> <b class='flag-5'>docker</b> <b class='flag-5'>部署</b> rancher 并构建 k8s 集群

    在华为云 FlexusX 实例实现 Docker 容器的实时监控与可视化分析

    前言 华为云 Flexus X,以顶尖算力与智能调度,引领 Docker 容器管理新风尚。828 企业上云节之际,Flexus X 携手前沿
    的头像 发表于 01-02 13:42 41次阅读
    在华为云 FlexusX <b class='flag-5'>实例</b>上<b class='flag-5'>实现</b> <b class='flag-5'>Docker</b> 容器的实时监控与可视化分析

    华为云 Flexus 云服务器 X 实例部署 Note Mark 笔记工具

    能够充分利用其卓越的计算能力,确保应用运行流畅,更能依托其稳定可靠的云服务体验,实现高效、便捷且安全的数据管理,开启个人信息管理的新篇章! 一、Flexus 云服务器 X
    的头像 发表于 01-02 13:42 35次阅读
    华为云 <b class='flag-5'>Flexus</b> 云服务器 <b class='flag-5'>X</b> <b class='flag-5'>实例</b><b class='flag-5'>部署</b> Note Mark 笔记工具

    华为云 Flexus 云服务器 X 实例Docker 环境下部署 JmalCloud 个人网盘

    前言 华为云 Flexus 云服务器 X 实例是专为中小企业和开发者设计的新一代柔性算力云服务器,以其强劲的性能和高性价比而著称。在这样的云服务器上部署 JmalCloud 个人网盘应
    的头像 发表于 01-02 13:41 42次阅读
    华为云 <b class='flag-5'>Flexus</b> 云服务器 <b class='flag-5'>X</b> <b class='flag-5'>实例</b>之 <b class='flag-5'>Docker</b> 环境下<b class='flag-5'>部署</b> JmalCloud 个人网盘

    华为云 Flexus X 实例 docker 部署最新 gitlab 社区版,搭建自己的私人代码仓库

    · 华为云最近正在举办 828 B2B 企业节,Flexus X 实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果有自建 MySQL、Redis、Nginx 等服务
    的头像 发表于 01-02 12:01 49次阅读
    华为云 <b class='flag-5'>Flexus</b> <b class='flag-5'>X</b> <b class='flag-5'>实例</b> <b class='flag-5'>docker</b> <b class='flag-5'>部署</b>最新 gitlab 社区版,搭建自己的私人代码仓库

    华为云 Flexus X 实例 docker 部署 jdk21 最新版 jenkins 搭建自己的 devops 服务器

    · 华为云最近正在举办 828 B2B 企业节,Flexus X 实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果有自建 MySQL、Redis、Nginx 等服务
    的头像 发表于 01-02 11:58 38次阅读
    华为云 <b class='flag-5'>Flexus</b> <b class='flag-5'>X</b> <b class='flag-5'>实例</b> <b class='flag-5'>docker</b> <b class='flag-5'>部署</b> jdk21 最新版 <b class='flag-5'>jenkins</b> 搭建自己的 devops 服务器

    华为云 Flexus X 实例 docker 部署 srs6 并调优,协议使用 webrtc 与 rtmp

    · 华为云最近正在举办 828 B2B 企业节,Flexus X 实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果有自建 MySQL、Redis、Nginx 等服务
    的头像 发表于 12-31 15:40 87次阅读
    华为云 <b class='flag-5'>Flexus</b> <b class='flag-5'>X</b> <b class='flag-5'>实例</b> <b class='flag-5'>docker</b> <b class='flag-5'>部署</b> srs6 并调优,协议使用 webrtc 与 rtmp

    Flexus 云服务器 X 实例:在 Docker 环境下搭建 java 开发环境

    和开发者精心打造。它以卓越的柔性算力,为我们在 Docker 环境下搭建 java 开发环境提供有力支撑。 一、Flexus 云服务器 X 实例介绍 1.1
    的头像 发表于 12-30 09:07 145次阅读
    <b class='flag-5'>Flexus</b> 云服务器 <b class='flag-5'>X</b> <b class='flag-5'>实例</b>:在 <b class='flag-5'>Docker</b> 环境下搭建 java 开发环境

    云服务器Flexus X实例Docker集成搭建Jenkins CI/CD平台

    Jenkins 是一个开源的自动化服务器,用于持续集成(CI)和持续交付(CD)软件项目。它允许开发人员在软件开发过程中自动化各种任务,如构建、测试和部署,从而提高开发效率和软件质量。
    的头像 发表于 12-29 15:43 120次阅读
    云服务器<b class='flag-5'>Flexus</b> <b class='flag-5'>X</b><b class='flag-5'>实例</b>,<b class='flag-5'>Docker</b>集成搭建<b class='flag-5'>Jenkins</b> CI/CD平台

    Flexus X 实例 C#/.Net Core 结合(git 代码管理、docker 自定义镜像)快速发布部署 - 让的项目飞起来~

    前言 ���云端部署新体验,C# Web API 遇上 Git Docker,828 B2B 企业节特惠来袭!Flexus X 实例,为您的
    的头像 发表于 12-25 21:15 156次阅读
    <b class='flag-5'>Flexus</b> <b class='flag-5'>X</b> <b class='flag-5'>实例</b> C#/.Net Core 结合(git 代码管理、<b class='flag-5'>docker</b> 自定义镜像)快速发布<b class='flag-5'>部署</b> - 让<b class='flag-5'>你</b>的项目飞起来~

    华为云 Flexus X 实例 docker 部署 mediacms,功能齐全的现代化开源视频和媒体 CMS

    华为云最近正在举办 828 B2B 企业节,Flexus X 实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果有自建 MySQL、Redis、Nginx 等服务的需
    的头像 发表于 12-25 17:51 162次阅读
    华为云 <b class='flag-5'>Flexus</b> <b class='flag-5'>X</b> <b class='flag-5'>实例</b> <b class='flag-5'>docker</b> <b class='flag-5'>部署</b> mediacms,功能齐全的现代化开源视频和媒体 CMS

    华为云 Flexus X 实例 docker 部署 Jitsi 构建属于自己的音视频会议系统

    华为云最近正在举办 828 B2B 企业节,Flexus X 实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果有自建 MySQL、Redis、Nginx 等服务的需
    的头像 发表于 12-25 17:08 103次阅读
    华为云 <b class='flag-5'>Flexus</b> <b class='flag-5'>X</b> <b class='flag-5'>实例</b> <b class='flag-5'>docker</b> <b class='flag-5'>部署</b> Jitsi 构建属于自己的音视频会议系统

    基于 Flexus 云服务器 X 实例体验大模型部署体验测评

    也很快。但是大家目前都是在体验,能不能部署一下试试呢? 今天,我们就以华为云 Flexus 云服务器 X 实例部署一下,顺便测测其性能看看
    的头像 发表于 12-24 12:27 188次阅读
    基于 <b class='flag-5'>Flexus</b> 云服务器 <b class='flag-5'>X</b> <b class='flag-5'>实例</b>体验大模型<b class='flag-5'>部署</b>体验测评