前文已经实现CI部分,本文继续以Asp.Net Core实现CD部分。

  

创建gogs仓库

  首先在gogs创建一个空项目drone-ci-demo,本地新建一个asp.net core项目,并且在与.csproj同级目录中创建Dockerfile,Dockerfile内容如下:

FROM microsoft/dotnet:2.2-aspnetcore-runtime
WORKDIR /app
COPY . .
EXPOSE
ENTRYPOINT ["dotnet","drone-ci-demo.dll"]

编写.drone.yml

  在项目根目录创建.drone.yml文件,内容如下:

kind: pipeline
type: docker
name: deployment steps:
- name: build
image: microsoft/dotnet
commands:
- dotnet restore
- dotnet build -c Release
- echo 项目生成成功
- name: publish harbor
image: plugins/docker
settings:
dockerfile: drone-ci-demo/Dockerfile
tags: latest
insecure: true
registry: 192.168.1.137:
repo: 192.168.1.137:/library/drone-ci-demo
username:
from_secret: docker_username
password:
from_secret: docker_password
- name: deploy
image: appleboy/drone-ssh
pull: true
settings:
host: 192.168.1.172
port:
username: root
password:
script:
- echo start deploy- echo 从harbor拉取docker镜像
- docker pull 192.168.1.137:/library/drone-ci-demo:latest
- docker tag 192.168.1.137:8072/library/drone-ci-demo:latest falltakeman/drone-ci-demo:latest
- docker run --name drone-ci-demo -p : falltakeman/drone-ci-demo- echo docker容器drone-ci-demo启动成功
- name: notify
image: drillster/drone-email
environment:
EMAIL_HOST:
from_secret: notify_email_host
EMAIL_PORT:
from_secret: notify_email_port
EMAIL_USERNAME:
from_secret: notify_email_username
EMAIL_PASSWORD:
from_secret: notify_email_password
settings:
from: 888888@.com
recipients: [@qq.com]
when:
status: [failure]
branch: [master]

  简单说明一下这个流水线任务。

    1、build -- 因为是aspnetcore项目,所以用到dotnet镜像;

    2、publish 2 harbor -- 这个步骤是将docker镜像推送到docker仓库,需要用到drone的一个插件docker,这里是推送到了自己的私有docker仓库harbor,上一篇博文已经记录了如何使用harbor;

    3、deploy -- 用到了另一个插件,appleboy的drone-ssh,首先登陆web server,然后从harbor中拉取镜像并运行,注意web server需开放对应的端口。关于这个插件的用法可以在drone插件市场查看;

    4、通知 -- drone-email的用法也可以在drone插件市场查看,按照需要的参数配置就行了。

  写好.drone.yml之后先不要急于提交,在drone项目仓库中启用drone-ci-demo,在settings中添加一些secrets,secret name就是上述.drone.yml中的from_secret。

项目部署

  由于web server在另一台服务器,私有镜像仓库harbor没有设置https,从harbor拉取代码需要配置docker daemon,添加harbor地址并重启docker。

sudo vi /etc/docker/daemon.json
{
"insecure-registries":[
"192.168.1.137:8072"
]
}
sudo systemctl restart docker

  都准备好之后就可以提交代码了,代码提交之后drone立即就开始干活了。第一次build需要很长时间,因为用到了microsoft/dotnet这个镜像,build阶段可以用更小一点的镜像替换掉。

  build成功之后,打包docker镜像并推送到harbor阶段失败了,抛出了两行warning:

WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

  解决办法:

vi /etc/sysctl.conf

  添加如下两行内容:

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

  重新加载配置

sysctl -p

  重新运行一下pipeline任务

Gogs + Drone 实现CI/CD(CD)的更多相关文章

  1. Gogs+Drone搭建CI/CD平台

    Gogs 是由 Go 语言编写的 Git 服务器,由中国人主导开发的一款开源项目,搭建方便并且拥有完善的中文文档,配合 Drone 可以实现持续集成/持续部署.本文介绍如何通过 Docker 搭建 G ...

  2. Gogs + Drone 实现CI/CD(CI)

    本文通过docker-compose方式安装运行drone,先将drone的server和agent镜像拉取到本地,这样docker-compose脚本执行速度会快一点.当然,不是必须先拉取drone ...

  3. 基于Gogs+Drone搭建的私有CI/CD平台

    请移步 基于Gogs+Drone搭建的私有CI/CD平台

  4. 容器云平台No.10~通过gogs+drone+kubernetes实现CI/CD

    什么是CI/CD 持续集成(Continous Intergration,CI)是一种软件开发实践,即团队开发成员经常集成它们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成.每 ...

  5. 在Jenkins的帮助下让我们的应用CI与CD

    上图三位大家应该很熟悉吧,借助这三者可以让我们的服务在Linux环境下持续集成.容器中持续部署. 本篇博客的项目是core webapi, .NET 5.0 在11号已经正式发布了,你们的项目都升级了 ...

  6. Docker最全教程之使用TeamCity来完成内部CI、CD流程(十六)

    本篇教程主要讲解基于容器服务搭建TeamCity服务,并且完成内部项目的CI流程配置.教程中也分享了一个简单的CI.CD流程,仅作探讨.不过由于篇幅有限,完整的DevOps,我们后续独立探讨. 为了降 ...

  7. 理解 CI 和 CD 之间的区别(翻译)

    博客搬迁至https://blog.wangjiegulu.com RSS订阅:https://blog.wangjiegulu.com/feed.xml 原文链接:https://blog.wang ...

  8. 阿里巴巴CI:CD之分层自动化实践之路

    阿里巴巴CI:CD之分层自动化实践之路 2018-05-30 摘自:阿里巴巴CI:CD之分层自动化实践之路 目录 1 自动化  1.1 为什么要做自动化?  1.2 自动化的烦恼  1.3 自动化的追 ...

  9. CI、CD和dev-ops概念

    传统的开发方式是:需求方提供文档,实现方按照文档一步步开发,中间很少变动和修改. 但是随着市场的变化,产品更新迭代的加快,也要求开放方更快的响应变化,用最短的时间开发,部署上线. 这样,持续集成(CI ...

随机推荐

  1. HandlerThread: HandlerThread的理解

    Android为了方便对Thread和Handler进行封装,也就是HandlerThread.HandlerThread继承自Thread,说白了就是Thread加上一个Looper.源码: 可以看 ...

  2. 使用layui框架的select获取选中的值

    在使用时需要注意:select标签的外层需要加上类名".layui-form" 接下来就是根据需求来改变下拉框的内容了,直接给select的option重新赋一次值,记得加上对应的 ...

  3. pytorch常用的padding函数

    1)ReflectionPad2d CLASS torch.nn.ReflectionPad2d(padding) 使用输入边界的反射来填充输入tensor 对于N维的填充,使用torch.nn.fu ...

  4. mybatis 枚举typeHandler

    枚举typeHandler 在绝大多数情况下,typeHandler因为枚举而使用,MyBatis已经定义了两个类作为枚举类型的支持,这两个类分别是: •EnumOrdinalTypeHandler. ...

  5. C#中,子线程与主线程之间的通信是如何实现(转)

    注: 项目中按照这个方法调试成功: 通常我们会有这种需求: 一个支持慢速设备的处理类,如网络通信.串口通信.打印等 此时经常需要将线程封装在类里面,让类支持异步处理,然后发布事件或者回调委托通知主线程 ...

  6. Sound (audio file) player in java - working source code example

    转载自:http://ganeshtiwaridotcomdotnp.blogspot.com/2011/12/sound-audio-file-player-in-java-working.html ...

  7. Dockerfile构建nginx镜像

    Dockerfile构建nginx镜像 [root@bogon ~]# mkdir /opt/docker-file [root@bogon ~]# cd /opt/docker-file/ [roo ...

  8. [转]Microsoft VS Code 改变默认文字编码

    概要:文件->首选项->设置 输入: "files.autoGuessEncoding": true, 然后勾上. 链接地址:https://jingyan.baidu ...

  9. jvm(3)---常用监控工具指令

    1.jps 查看jvm中运行的进程(获取对应pid) 参数:默认-V(大写) -v: 列出jvm启动参数. ---------------------------------- 2.jstack pi ...

  10. Brave浏览器

    Brave是基于Chromium的开源Web浏览器,具有更快的页面加载速度,并且默认情况下会阻止广告和跟踪器.整合了一些其它浏览器所没有的功能,其中包括被称为 Basic Attention Toke ...