drone如何发布docker服务

上篇主要实现了drone在物理机上进行发布程序,这次介绍drone如何发布docker类型的服务。

一 drone.yml文件配置

前提:需要提前在drone里添加文件里面所引用的密钥

kind: pipeline # 定义对象类型,还有secret和signature两种类型
type: docker # 定义流水线类型,还有kubernetes、exec、ssh等类型
name: drone-miaosha # 定义流水线名称

steps: # 定义流水线执行步骤,这些步骤将顺序执行
  - name: build-package # 流水线名称
    image: maven:3.8.4 # 定义创建容器的Docker镜像
    volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置
      - name: maven-build
        path: /root/.m2 # 将应用打包好的Jar和执行脚本挂载出来
    
    commands:
      - mvn clean install
      # 将打包后的jar包,拷贝到挂载目录
      - cp /root/.m2/repository/com/huningfei/demo/0.0.1-SNAPSHOT/*.jar  ./
      

            
# 构建docker镜像并推送
  - name: build and push image
    pull: if-not-exists # 如果镜像不存在则拉取,免去每次都要重新下载
    image: plugins/docker #选择docker:dind镜像
    volumes:
    - name: docker-sock
      path: /var/run/docker.sock #映射宿主机Docker
    settings:
      registry: registry.cn-hangzhou.aliyuncs.com
      repo: registry.cn-hangzhou.aliyuncs.com/huningfei/welcome
      tags: latest
      dockfile: ./Dockerfile
      username:
        from_secret: docker_username
      password:
        from_secret: docker_password
   
      
      
     # 步骤3 使用ssh访问主机,拉去镜像并运行部署
  - name: deploy
    pull: if-not-exists # 如果镜像不存在则拉取,免去每次都要重新下载
    image: appleboy/drone-ssh 
    settings:
   # 需要部署的主机地址
      host: 192.168.2.45
   # 主机ssh端口
      port: 22
    # 主机登陆用户名
      username: root
      password: 
    # 从drone仓库配置中秘密空间读取密码
        from_secret: ssh_pwd
      script:
        - echo "=========暂停并删除旧容器========"
        - docker stop test-demo && docker rm test-demo
        - echo "=========删除旧镜像============="
        - docker rmi registry.cn-hangzhou.aliyuncs.com/huningfei/welcome:latest 
        - echo "========从harbor拉取最新镜像========"
        - docker pull registry.cn-hangzhou.aliyuncs.com/huningfei/welcome:latest 
        - echo "===============运行镜像=========="
        - docker run --name test-demo -p 8081:8081 -d registry.cn-hangzhou.aliyuncs.com/huningfei/welcome:latest
        - echo "========部署成功========"                                                     
  

 
  - name: notify      # 步骤4 部署完成,邮件通知
    pull: if-not-exists # 如果镜像不存在则拉取,免去每次都要重新下载
    image: drillster/drone-email
    settings:
      recipients_only: true # 只发送给指定邮件收件人,不默认发送给流水线创建人
      host: smtp.qq.com      #SMTP服务器 例如 smtp.qq.com
      port: 465   #SMTP服务端口  例如QQ邮箱端口465
      subject: "Drone Build Complete!"
      username:
        from_secret: qqmail_username
      password:
        from_secret: qqmail_pwd
      from:
        from_secret: qqmail_username
      recipients: [email protected]           #收件人邮箱
    when: #执行条件
      status:
        - success
        - changed
        - failure
volumes: # 定义流水线挂载目录,用于共享数据
  - name: maven-build
    host:
      path: /home/mvn/.m2   #jar包目录可以修改从宿主机中挂载的目录
      
volumes:
  - name: docker-sock
    host:
      path: /var/run/docker.sock

# 可限制哪些分支可以推送自动CICD
trigger:
  branch:
    - master

使用plugins/docker 这个镜像,会自动构建,更改tag,然后上传到镜像仓库,一切都是自动的

二 dockerfile内容

FROM openjdk:8
COPY target/demo-0.0.1-SNAPSHOT.jar  /demo-0.0.1-SNAPSHOT.jar
CMD java -jar /demo-0.0.1-SNAPSHOT.jar

三 查看构建结果

drone如何发布docker服务_第1张图片

image.png

你可能感兴趣的:(CICD,docker,容器,运维,drone,gogs)