• 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任务

     

     

     

  • 相关阅读:
    django中间件和常用模块
    django之forms组件
    django和ajax、分页器、批量插入数据
    django之模型层ORM操作
    (专题三)02-1 程序和程序设计流程-选择结构
    (专题三)01 程序和程序设计流程-顺序结构
    (专题二)05 矩阵的存储方式
    (专题二)04 矩阵的处理-矩阵的特征值
    [代码片段]YEAH!连通域标记和计数
    TTL和CMOS
  • 原文地址:https://www.cnblogs.com/fallTakeMan/p/11875846.html
Copyright © 2020-2023  润新知