• Drone 教程


    Drone 相对于常见的 Jenkins,选中 Drone 的原因在于它非常简洁,不像 Jenkins 那样复杂,同时它拥有可以满足基本需求的能力,并且提供了许多实用的插件。
    而且 Jenkins 包含了大量的图形化界面,虽然大而全,但是在有时候只想简单的做一个 CI 的容器时就显得有些笨重,本文简单的介绍使用 docker 搭建 drone 项目,并发布一个 SpringBoot 的 Java 项目。

    Drone 文档给出了相对于不同git仓库和部署方式的方案,支持的git仓库有:GitHub,GitLab,Gitea,Gogs 等,本文使用 Gogs 仓库

    使用 Docker 安装 Drone

    首先下载 Drone 的 Server 和 Runner 的镜像

    docker pull drone/drone:2
    docker pull drone/drone-runner-docker:1
    

    Server:为 Drone 的管理提供了 Web 页面,用于管理从 Git 上获取的仓库中的流水线任务

    Runner:一个单独的守护进程,会轮询 Server,获取需要执行的流水线任务,之后执行

    安装 drone-server

    sudo docker run \
      --volume=/home/cl/drone:/data \
      --env=DRONE_AGENTS_ENABLED=true \
      --env=DRONE_GOGS_SERVER=http://192.168.50.228:13000 \
      --env=DRONE_RPC_SECRET=rpc_secret \
      --env=DRONE_SERVER_HOST=192.168.50.228:3080 \
      --env=DRONE_SERVER_PROTO=http \
      --env=DRONE_USER_CREATE=username:chenglong,admin:true \
      --publish=3080:80 \
      --publish=443:443 \
      --restart=always \
      --detach=true \
      --name=drone \
      drone/drone:2
    

    DRONE_GOGS_SERVER:用于配置 Gogs 服务地址

    DRONE_RPC_SECRET:Drone 的共享秘钥,用于验证连接到 server 的 rpc 连接,server 和 runner 需要提供同样的秘钥

    DRONE_SERVER_HOST:用于配置 Drone server 外部可访问的地址

    DRONE_SERVER_PROTO:用于配置 Drone server 外部可访问的协议,必须是 http 或 https

    DRONE_USER_CREATE:创建一个管理员账号,该账号需要在 Gogs 中注册好,否则在后面无法将仓库设置为Trusted

    安装 drone-runner-docker

    sudo docker run --detach \
      --volume=/var/run/docker.sock:/var/run/docker.sock \
      --env=DRONE_RPC_PROTO=http \
      --env=DRONE_RPC_HOST=192.168.50.228:3080 \
      --env=DRONE_RPC_SECRET=rpc_secret \
      --env=DRONE_RUNNER_CAPACITY=2 \
      --env=DRONE_RUNNER_NAME=docker-runner \
      --publish=3000:3000 \
      --restart=always \
      --name=runner \
      drone/drone-runner-docker:1
    

    DRONE_RPC_PROTO:用于配置连接到 Drone server 的协议,必须是 http 或 https

    DRONE_RPC_HOST:用于配置 Drone server 的访问地址,runner 会连接到 server 获取流水线任务并执行

    DRONE_RPC_SECRET:用于配置连接到 Drone server 的共享秘钥

    DRONE_RUNNER_CAPACITY:限制 runner 并发执行的流水线任务数量

    DRONE_RUNNER_NAME:自定义 runner 的名称

    Drone 的使用

    访问下 Drone 的控制台页面,第一次登录需要输入账号密码(在Gogs中注册的账号),访问地址就是刚刚制定的 DRONE_SERVER_HOST 的地址。此时我们在Gogs中的项目会现在在列表中

    点击项目后点击 Activate Repository

    接下来我们需要对仓库进行设置,将仓库设置为 Trusted,最后点击SAVE按钮保存

    保存成功后会在 Gogs 中自动配置一个 Web 钩子,当我们推送代码到 Gogs 中去时,会触发这个钩子,然后执行在 Drone 中的流水线任务

    这里要注意,现在 Gogs 的 WebHooks 是没有办法测试的,点击后会提示 io timeout,这是由于我们项目中还没有配置 .drone.yml 文件导致的,添加后即可正常调用

    剩下的就是 .drone.yml 脚本的编写了,这个脚本要放在项目的根目录下,我这里简单的演示一下在项目的部署。

    .drone.yml

    kind: pipeline
    type: docker
    name: house-pipeline
    
    steps:
      - name: build image
        image: maven:3-jdk-11
        volumes:
          - name: maven-cache
            path: /root/.m2/repository
          - name: maven-build
            path: /app/build
        commands:
          - mvn install -DskipTests=true -Dmaven.javadoc.skip=true
          - mv -f /drone/src/target/*.jar /app/build/house.jar
    
      - name: build-start
        image: appleboy/drone-ssh
        settings:
          host: 192.168.50.228
          username: cl
          password:
            from_secret: ssh_password
          port: 22
          command_timeout: 5m
          script:
            - cd /home/cl/maven-build
            - chmod +x run.sh
            - sh run.sh
    volumes:
      - name: maven-cache
        host:
          path: /home/cl/repository
      - name: maven-build
        host:
          path: /home/cl/maven-build
    

    run.sh

    #!/bin/bash
    
    source /etc/profile
    nohup java -jar -Xmx1024M -Xms256M -Duser.timezone=GMT+8 house.jar --server.port=5188 > house.log 2>&1 &
    

    注意 yml 的语法,使用空格而不是 Tab 可以减少看不见的错误
    在使用 shell 脚本发布项目的时候,如果提示 java command not found,需要先执行一下 source 一下环境变量,这样就能正常使用了

    简单解释一下 .drone.yml,具体的使用请参考官网 demo,这里不做详细说明

    挂载容器的 /root/.m2/repository 和 /app/build 到宿主机,方便重复使用 .m2 仓库以及保存打包好的 jar 文件

    使用 appleboy/drone-ssh 这个镜像远程到制定的服务器中,然后调用 shell 脚本发布项目

    成果

    配置好后,每当我提交代码到指定分支后,drone 就会帮我们自动部署项目啦。

  • 相关阅读:
    idea快捷键总结
    将对象序列化和反序列化
    在Springmvc中获取properties属性
    配置springmvc在其他类中(spring容器外)获取注入bean
    redis学习之三配置文件redis.conf 的含义
    redis学习之二from github
    敏捷开发方法XP的12个最佳实践
    IIS-网站发布之后访问HTTP 错误 403.14
    IIS-将iis直接指向.net代码会出现错误
    HTTP 错误 500.24
  • 原文地址:https://www.cnblogs.com/manastudent/p/15938616.html
Copyright © 2020-2023  润新知