前文已经实现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任务

最新文章

  1. 如何在Python中实现这五类强大的概率分布
  2. BurpSuite 抓手机包
  3. 简述Python模块和包
  4. ecshop /includes/modules/payment/alipay.php SQL Injection Vul
  5. nyoj 364 田忌赛马(贪心)
  6. android selector(如对TextView点击样式改变)
  7. 互联网产品团队中Web前端工程师的重要性
  8. Python学习笔记15—mysql的操作
  9. jQuery中的ajax服务端返回方式详细说明
  10. MySQL运行出错:无法连接驱动、无root访问权限解决办法
  11. HttpWebRequest post请求获取webservice void数据信息
  12. ms sql server缓存清除与内存释放
  13. 使用证书部署出现System.Security.Cryptography.CryptographicException 错误解决方案
  14. ABP入门系列(16)——通过webapi与系统进行交互
  15. Nginx学习——Nginx启动、停止、重启和信号控制以及平滑升级
  16. 分析DuxCms之AdminController
  17. VS code自定义用户代码片段snippet
  18. 04. Pandas 3| 数值计算与统计、合并连接去重分组透视表文件读取
  19. 动态规划-最大的正方形面积 Maximal Square
  20. Linux/AIX/Windows端口和进程互查

热门文章

  1. 006 DOM节点操作与元素的创建
  2. 021 CSS高级特性
  3. MAC下快速打开指定目录(转)
  4. 解决Wireshark安装Npcap组件失败
  5. JDBC DataSource
  6. 微信小程序与Html交互
  7. python 抓取数据 存入 excel
  8. linux下nacos的1.1.3版本集群部署
  9. SQLite数据库数据类型详解
  10. mat文件读写