【Docker】实战案例 - CI/CD

在这里插入图片描述

作者主页: 正函数的个人主页
文章收录专栏: Docker
欢迎大家点赞 👍 收藏 ⭐ 加关注哦!


CI/CD

持续集成(Continuous integration) 是一种软件开发实践,每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

持续部署(continuous deployment) 是通过自动化的构建、测试和部署循环来快速交付高质量的产品。

Jenkins 不同的是,基于 Docker 的 CI/CD 每一步都运行在 Docker 容器中,所以理论上支持所有的编程语言。


一、GitHub Actions

GitHub Actions 是 GitHub 推出的一款 CI/CD 工具。

我们可以在每个 jobstep 中使用 Docker 执行构建步骤。

on: pushname: CIjobs:my-job:name: Buildruns-on: ubuntu-lateststeps:- uses: actions/checkout@masterwith:fetch-depth: 2- name: run docker containeruses: docker://golang:alpinewith:args: go version

参考资料

  • Actions Docs

二、Drone

基于 DockerCI/CD 工具 Drone 所有编译、测试的流程都在 Docker 容器中进行。

开发者只需在项目中包含 .drone.yml 文件,将代码推送到 git 仓库,Drone 就能够自动化的进行编译、测试、发布。

本小节以 GitHub + Drone 来演示 Drone 的工作流程。当然在实际开发过程中,你的代码也许不在 GitHub 托管,那么你可以尝试使用 Gogs + Drone 来进行 CI/CD

Drone 关联项目

在 Github 新建一个名为 drone-demo 的仓库。

打开我们已经 部署好的 Drone 网站 或者 Drone Cloud,使用 GitHub 账号登录,在界面中关联刚刚新建的 drone-demo 仓库。

编写项目源代码

初始化一个 git 仓库

$ mkdir drone-demo$ cd drone-demo$ git init$ git remote add origin git@github.com:username/drone-demo.git

这里以一个简单的 Go 程序为例,该程序输出 Hello World!

编写 app.go 文件

package mainimport "fmt"func main(){fmt.Printf("Hello World!\n");
}

编写 .drone.yml 文件

kind: pipeline
type: docker
name: build
steps:
- name: buildimage: golang:alpinepull: if-not-exists # always neverenvironment:KEY: VALUEcommands:- echo $KEY- pwd- ls- CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .- ./apptrigger:branch:- master

现在目录结构如下

.
├── .drone.yml
└── app.go

推送项目源代码到 GitHub

$ git add .$ git commit -m "test drone ci"$ git push origin master

查看项目构建过程及结果

打开我们部署好的 Drone 网站或者 Drone Cloud,即可看到构建结果。

在这里插入图片描述

当然我们也可以把构建结果上传到 GitHub,Docker Registry,云服务商提供的对象存储,或者生产环境中。

本书 GitBook 也使用 Drone 进行 CI/CD,具体配置信息请查看本书根目录 .drone.yml 文件。

参考链接

  • Drone Github
  • Drone 文档
  • Drone 示例

三、部署 Drone

要求

  • 拥有公网 IP、域名 (如果你不满足要求,可以尝试在本地使用 Gogs + Drone)

  • 域名 SSL 证书 (目前国内有很多云服务商提供免费证书)

  • 熟悉 Docker 以及 Docker Compose

  • 熟悉 Git 基本命令

  • CI/CD 有一定了解

新建 GitHub 应用

登录 GitHub,在 https://github.com/settings/applications/new 新建一个应用。

在这里插入图片描述

接下来查看这个应用的详情,记录 Client IDClient Secret,之后配置 Drone 会用到。

配置 Drone

我们通过使用 Docker Compose 来启动 Drone,编写 docker-compose.yml 文件。

version: '3'services:drone-server:image: drone/drone:2.3.1ports:- 443:443- 80:80volumes:- drone-data:/data:rw- ./ssl:/etc/certsrestart: alwaysenvironment:- DRONE_SERVER_HOST=${DRONE_SERVER_HOST:-https://drone.yeasy.com}- DRONE_SERVER_PROTO=${DRONE_SERVER_PROTO:-https}- DRONE_RPC_SECRET=${DRONE_RPC_SECRET:-secret}- DRONE_GITHUB_SERVER=https://github.com- DRONE_GITHUB_CLIENT_ID=${DRONE_GITHUB_CLIENT_ID}- DRONE_GITHUB_CLIENT_SECRET=${DRONE_GITHUB_CLIENT_SECRET}drone-agent:image: drone/drone-runner-docker:1restart: alwaysdepends_on:- drone-servervolumes:- /var/run/docker.sock:/var/run/docker.sock:rwenvironment:- DRONE_RPC_PROTO=http- DRONE_RPC_HOST=drone-server- DRONE_RPC_SECRET=${DRONE_RPC_SECRET:-secret}- DRONE_RUNNER_NAME=${HOSTNAME:-demo}- DRONE_RUNNER_CAPACITY=2dns: 114.114.114.114volumes:drone-data:

新建 .env 文件,输入变量及其值

# 必填 服务器地址,例如 drone.domain.com
DRONE_SERVER_HOST=
DRONE_SERVER_PROTO=https
DRONE_RPC_SECRET=secret
HOSTNAME=demo
# 必填 在 GitHub 应用页面查看
DRONE_GITHUB_CLIENT_ID=
# 必填 在 GitHub 应用页面查看
DRONE_GITHUB_CLIENT_SECRET=

启动 Drone

$ docker-compose up -d

作者主页: 正函数的个人主页
文章收录专栏: Docker
在这里插入图片描述

在这里插入图片描述

欢迎大家点赞 👍 收藏 ⭐ 加关注哦!
如果你认为这篇文章对你有帮助,请给正函数点个赞吧,如果发现什么问题,欢迎评论区留言!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/648293.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openssl3.2/test/certs - 072 - EE SHA256

文章目录 openssl3.2/test/certs - 072 - EE SHA256概述笔记END openssl3.2/test/certs - 072 - EE SHA256 概述 openssl3.2 - 官方demo学习 - test - certs 笔记 /*! * \file D:\my_dev\my_local_git_prj\study\openSSL\test_certs\072\my_openssl_linux_doc_072.txt * \n…

Java项目:SSM框架基于spring+springmvc+mybatis实现的心理预约咨询管理系统(ssm+B/S架构+源码+数据库+毕业论文)

一、项目简介 本项目是一套ssm823基于SSM框架的心理预约咨询管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试&am…

车用OS赛道研究:10%渗透率拐点,中国本土供应商突围策略

车用OS赛道当前正站在发展节点上,国内玩家也正基于现实情况进行突围。 智驾、座舱域控渗透率均处于快速增长期的拐点(以10%渗透率界)。高工智能汽车研究院监测数据显示,2023年1-9月,国内(不含进出口&#…

【软件测试】学习笔记-构建并执行 JMeter 脚本的正确姿势

有些团队在组建之初往往并没有配置性能测试人员,后来随着公司业务体量的上升,开始有了性能测试的需求,很多公司为了节约成本会在业务测试团队里选一些技术能力不错的同学进行性能测试,但这些同学也是摸着石头过河。他们会去网上寻…

leetcode560和为k的子数组

class Solution { public:int subarraySum(vector<int>& nums, int k) {unordered_map<int,int>mp;mp[0]1;int count0,pre0;for(auto& x:nums){prex;if(mp.find(pre-k)!mp.end()){countmp[pre-k];}mp[pre];}return count;} }; 一个超级好的思路&#xff0…

Ubuntu 下进行系统备份与迁移

经常一个项目做到一半&#xff0c;结果系统崩溃了&#xff0c;每次都得重装系统&#xff0c;因此&#xff0c;就在想怎么才能够直接在ubuntu系统备份现有的系统呢?找了很多教程&#xff0c;发现都需要安装软件&#xff0c;这些方法都比较复杂&#xff0c;后来终于找到一种简单…

C++提高编程——STL:deque容器、stack容器和queue容器

本专栏记录C学习过程包括C基础以及数据结构和算法&#xff0c;其中第一部分计划时间一个月&#xff0c;主要跟着黑马视频教程&#xff0c;学习路线如下&#xff0c;不定时更新&#xff0c;欢迎关注。 当前章节处于&#xff1a; ---------第1阶段-C基础入门 ---------第2阶段实战…

C++实用教程(四):面向对象核心多态 笔记

推荐B站视频&#xff1a;C现代实用教程(四):面向对象核心多态_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV15v4y1M7fF/?spm_id_from333.999.0.0&vd_sourcea934d7fc6f47698a29dac90a922ba5a3 本项目通用的tasks.json文件和launch.json tasks.json {"versi…

git常见命令

1、常用命令记录 1&#xff09;切换分支 git checkout 分支名2&#xff09;查看分支 查看远程分支 git branch -r 查看所有分支包括本地分支和远程分支 git branch -a3&#xff09;合并分支 git merge 来源分支4&#xff09;删除分支 删除本地分支&#xff1a;git branch …

让B端管理软件既美观又实用的解决方案来了

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验&#xff01;希望我的分享能帮助到您&#xff01;如需帮助可以评论关注私信我们一起探讨&#xff01;致敬感谢感恩&#xff01; 让B端管理软件既美观又实用的解决方案来了 在当今数字化时代&#xff0c;B端管理软件已…

解密神经网络:深入探究传播机制与学习过程

解密神经网络&#xff1a;深入探究传播机制与学习过程 文章目录 解密神经网络&#xff1a;深入探究传播机制与学习过程一、引言二、基础理论1. 人工神经元&#xff1a;构建块的定义2. 神经网络的结构3. 激活函数的作用 三、前向传播1. 数据流动&#xff1a;输入到输出2. 加权和…

安泰ATA-4014高压功率放大器在超声马达驱动电路设计中的应用

本文将与大家分享&#xff0c;ATA-4014高压功率放大器在超声马达驱动电路设计和制作中的应用&#xff0c;希望能对各位工程师有所帮助与启发。 1引言 超声波马达又称超声电机(ultrasonicmotor&#xff0c;简称USM)20世纪80年代才诞生的一种全新概念电机种类.超声电机采用与传统…

Linux之buildroot

Buildroot 是用于生成嵌入式Linux系统的完整构建工具链和环境。 Buildroot 通过自动化编译过程&#xff0c;可以帮助你从零开始构建一个自定义的、优化的嵌入式Linux系统&#xff0c;该系统通常包括以下几个关键部分&#xff1a; 交叉编译工具链&#xff1a;Buildroot会自动构建…

网络端口与 IP 地址有什么区别?

网络端口和IP地址是计算机网络中两个非常重要的概念&#xff0c;它们在实现网络通信和数据传输中扮演着不同的角色。 IP地址 IP地址&#xff08;Internet Protocol Address&#xff09;是用于标识网络上设备的唯一地址。它是一个由数字组成的标识符&#xff0c;用于在网络中准…

华为AC+FIT AP组网配置

AC配置 vlan batch 100 to 101dhcp enableip pool apgateway-list 192.168.100.254 network 192.168.100.0 mask 255.255.255.0 interface Vlanif100ip address 192.168.100.254 255.255.255.0dhcp select globalinterface GigabitEthernet0/0/1port link-type trunkport trun…

马尔可夫预测(Python)

马尔科夫链&#xff08;Markov Chains&#xff09; 从一个例子入手&#xff1a;假设某餐厅有A&#xff0c;B&#xff0c;C三种套餐供应&#xff0c;每天只会是这三种中的一种&#xff0c;而具体是哪一种&#xff0c;仅取决于昨天供应的哪一种&#xff0c;换言之&#…

2024年会是大牛市吗?我有500万想找个证券公司开融资融券账户,哪家券商两融利率最低?

2024年是否会迎来大牛市&#xff0c;这是一个颇具争议的话题。然而&#xff0c;无论市场走势如何&#xff0c;对于有500万的投资者来说&#xff0c;开立一个融资融券账户确实是一个不错的选择。在选择券商时&#xff0c;除了考虑两融利率外&#xff0c;投资者还应该关注券商的服…

10. UE5 RPG使用GameEffect创建血瓶修改角色属性

前面我们通过代码实现了UI显示角色的血量和蓝量&#xff0c;并实现了初始化和在数值变动时实时更新。为了测试方便&#xff0c;没有使用GameEffect去修改角色的属性&#xff0c;而是通过代码直接修改的数值。 对于GameEffect的基础&#xff0c;这里不再讲解&#xff0c;如果需要…

5.列表选择弹窗(BottomListPopup)

愿你出走半生,归来仍是少年&#xff01; 环境&#xff1a;.NET 7、MAUI 从底部弹出的列表选择弹窗。 1.布局 <?xml version"1.0" encoding"utf-8" ?> <toolkit:Popup xmlns"http://schemas.microsoft.com/dotnet/2021/maui"xmlns…

幻兽帕鲁游戏多人联机服务器价格对比:腾讯云VS阿里云VS华为云

《幻兽帕鲁》游戏5天捞金15亿&#xff0c;而且想要多人联机玩游戏&#xff0c;还允许我们自己购买服务器来搭建专属服务器&#xff0c;届时三五好友一起来玩&#xff0c;真的不要太爽啊&#xff01;那么搭建幻兽帕鲁游戏多人联机的服务器需要多少钱&#xff1f;下面boke112百科…