Gogs + Drone 实现CI/CD(CD)

 

        前文已经实现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 29029
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 2 harbor
  image: plugins/docker
  settings: 
    dockerfile: drone-ci-demo/Dockerfile
    tags: latest
    insecure: true
    registry: 192.168.1.137:8072
    repo: 192.168.1.137:8072/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: 22
    username: root
    password: 123456
    script:
      - echo start deploy- echo 从harbor拉取docker镜像
      - docker pull 192.168.1.137:8072/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 29029:29029 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@163.com
    recipients: [888888@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任务

 

 

 

 

 

 

posted @   原来是李  阅读(2918)  评论(9编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示