zoukankan      html  css  js  c++  java
  • 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任务

     

     

     

  • 相关阅读:
    day01--计算机硬件基础笔记
    22 Jun 18 Django,ORM
    21 Jun 18 Django,ORM
    20 Jun 18 复习, mysql
    20 Jun 18 Django,ORM
    19 Jun 18 复习, 正则表达式
    19 Jun 18 Django
    15 Jun 18 复习, shutil模块
    15 Jun 18 Django
    14 Jun 18 复习, form表单
  • 原文地址:https://www.cnblogs.com/fallTakeMan/p/11875846.html
Copyright © 2011-2022 走看看