drone + gogs + springBoot自动化发布多个springBoot服务

环境配置

1. docker 配置
gogs
docker run -p 10022:22 -p 3000:3000 --name=gogs \
-v /mydata/gogs:/data  \
-d gogs/gogs

这里我们说下命令中值得注意的地方,

  • 10022对应的是Gogs的SSH服务端口,
  • 10080对应的使用Gogs的HTTP服务端口,
  • 我们还将容器的数据目录挂载到了宿主机的/mydata/gogs目录下,这样就算我们重新创建容器数据也不会丢失。
  • 运行后会发现地址为localhost , 可以修改 data/gogs/conf/app.ini 文件
drone server
# DRONE_USER_CREATE 用来设置管理员账号 后面会有用, 用gogs 上的账号名

docker run \
  --volume=/opt/module/drone:/data \
  --env=DRONE_AGENTS_ENABLED=true \
  --env=DRONE_GOGS_SERVER=http://192.168.56.10:3000 \
  --env=DRONE_RPC_SECRET=super-duper-secret \
  --env=DRONE_SERVER_HOST=192.168.56.10:8000 \
  --env=DRONE_SERVER_PROTO=http \
  --env=DRONE_USER_CREATE=username:tang,admin:true \
  --publish=8000:80 \
  --publish=4430:443 \
  --restart=always \
  --detach=true \
  --name=drone \
  drone/drone:2
drone running
# DRONE_RPC_SECRET 要与上面的相同

  docker run --detach \
  --volume=/var/run/docker.sock:/var/run/docker.sock \
  --env=DRONE_RPC_PROTO=http \
  --env=DRONE_RPC_HOST=192.168.56.10:8000 \
  --env=DRONE_RPC_SECRET=super-duper-secret \
  --env=DRONE_RUNNER_CAPACITY=2 \
  --env=DRONE_RUNNER_NAME=my-first-runner \
  --publish=4000:4000 \
  --restart=always \
  --name=runner \
  drone/drone-runner-docker:1
2. docker-compose (与docker 选一个就行)
version: "1.0"
services:

  # gogs 服务镜像
  gogs:
    image: gogs/gogs
    container_name: gogs
    restart: always
    ports:
      - "10022:22"	# ssh 端口
      - "3000:3000" # gogs仓库
    volumes:
      - /data/docker_test/gogs:/data	# gogs 挂载卷
  
  # drone server 端
  drone:
    image: drone/drone:latest
    container_name: drone-server
    ports:
      - "8000:80"	# drone 服务:HTTP
      - "10443:443"	# drone 服务:HTTPS
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock	# 本地docker
      - /opt/module/drone:/data	# 挂载卷
    restart: always
    environment:
      - TZ=Asia/Shanghai
      - DRONE_OPEN=true
      - DRONE_GOGS_SERVER=http://192.168.56.10:3000/	# 不同的代码仓库对应不同的key, v: 服务器仓库地址
      - DRONE_SERVER_HOST=192.168.56.10:8000 # drone 的server端地址
      - DRONE_SERVER_PROTO=http
      - DRONE_LOGS_TRACE=true
      - DRONE_LOGS_DEBUG=true
      - DRONE_GOGS=true
      - DRONE_PROVIDER=gogs	# 代码仓库
      - DRONE_RPC_SECRET=2cbdaab90813f3743dc700816a322c62  # 秘钥与runner一致
      - DRONE_USER_CREATE=username:tang,admin:true	# 设置管理员账户, 与gogs一致, 否则无法使用缓存
  
  # drone runner 端, 用于执行pipeline
  drone-runner:
    image: drone/drone-runner-docker:1
    container_name: drone-docker-runner	# docker 与 ssh 有不同的runner
    restart: always
    ports:
      - 10082:3000	# 端口映射
    depends_on:
      - drone	# server端先构建启动
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock	# 本机docker
    environment:
      - TZ=Asia/Shanghai
      - DRONE_DEBUG=true
      - DRONE_RPC_SECRET=2cbdaab90813f3743dc700816a322c62	# 秘钥与server端一致
      - DRONE_RPC_HOST=192.168.56.10:8000	# server端
      - DRONE_RPC_PROTO=http
      - DRONE_RUNNER_CAPACITY=2
      - DRONE_RUNNER_NAME=drone-runner

登录进入gogs 并有仓库之后
需要进入drone 设置仓库属性
在这里插入图片描述

文件配置

项目中要有一个 .drone.yml ,在提交git 之后会自动读取这个文件,然后运行里面的语句
我这里yml 的配置

.drone.yml
kind: pipeline
type: docker
name: pipeline-example-maven

clone:
  disable: true # 禁用自带的clone

steps:
  - name: clone
    image: alpine/git
    commands:
      - git clone http://192.168.56.10:3000/tang/git-test.git .
      - git checkout $DRONE_COMMIT
    when:
      event:
        - push # 当代码 push 时才重新拉取

  - name: Maven编译
    image: maven:3.8-openjdk-8
    volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置
      - name: maven-cache
        path: /opt/module/maven # 将maven下载依赖的目录挂载出来,防止重复下载
      - name: maven-build
        path: /app/build # 将应用打包好的Jar和执行脚本挂载出来
      - name: maven-xml
        path: /usr/share/maven/conf
    commands: # 定义在Docker容器中执行的shell命令
      - mvn clean package # 应用打包命令
      - rm -rf /app/build/*
      - cp -r $PWD/**/**/*.jar /app/build
      - cp -r $PWD/**/Dockerfile_* /app/build
      - cp run.sh /app/build/run.sh
    when:
      event:
        - push # 当代码 push 时才重新编译


  - name: web-start 打包发布
    image: appleboy/drone-ssh # SSH工具镜像
    settings:
      host: 192.168.56.10 # 远程连接地址
      username: root # 远程连接账号
      password:
        from_secret: ssh_key # 从Secret中读取SSH密码
      port: 22 # 远程连接端口
      command_timeout: 5m # 远程执行命令超时时间
      script:
        - cd /root/opt/module/project/test # 进入宿主机构建目录
        - chmod +x run.sh # 更改为可执行脚本
        - ./run.sh "web-start" 8080 # 运行脚本打包应用镜像并运行
    when:
      event:
        - promote
      target:
        - web-start

  - name: web2-start 打包发布
    image: appleboy/drone-ssh # SSH工具镜像
    settings:
      host: 192.168.56.10 # 远程连接地址
      username: root # 远程连接账号
      password:
        from_secret: ssh_key # 从Secret中读取SSH密码
      port: 22 # 远程连接端口
      command_timeout: 5m # 远程执行命令超时时间
      script:
        - cd /root/opt/module/project/test # 进入宿主机构建目录
        - chmod +x run.sh # 更改为可执行脚本
        - ./run.sh "web2-start" 8081 # 运行脚本打包应用镜像并运行 并设置端口
    when:
      event:
        - promote
      target:
        - web2-start # 判断promote 的 Target 参数 , 只有当相同时触发


volumes: # 定义流水线挂载目录,用于共享数据
  - name: maven-build
    host:
      path: /root/opt/module/project/test # 从宿主机中挂载的目录
  - name: maven-cache
    host:
      path: /opt/module/maven
  - name: maven-xml
    host:
      path: /opt/module/maven/apache-maven-3.8.5/conf
run.sh
#!/usr/bin/env bash
# 定义应用组名
group_name="$1"
# 定义应用名称
app_name="$1"
# 定义应用版本
app_version='latest'
# 定义应用环境
profile_active='prod'
echo '----copy jar----'
docker stop ${app_name}
echo '----stop container----'
docker rm ${app_name}
echo '----rm container----'
docker rmi ${group_name}/${app_name}:${app_version}
echo '----rm image----'
# 打包编译docker镜像
docker build -t ${group_name}/${app_name}:${app_version} -f Dockerfile_${app_name} .
echo '----build image----'
docker run -p $2:$2 --name ${app_name} \
  -e TZ="Asia/Shanghai" \
  -v /etc/localtime:/etc/localtime \
  -d ${group_name}/${app_name}:${app_version}
echo '----start container----'

Dockerfile

每个小服务都有一个Dockerfile

# 基础镜像使用java
FROM openjdk:8-jdk-alpine
ADD web2-start-1.0-SNAPSHOT.jar web2-start-1.0-SNAPSHOT.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","web2-start-1.0-SNAPSHOT.jar"]

测试

代码提交之后 drone 会clone 和maven 编译
在这里插入图片描述在这里插入图片描述编译完成之后 点 promote
在这里插入图片描述然后 输入要发布的 Target 服务名
在这里插入图片描述然后就会发布指定的服务
在这里插入图片描述成功
加粗样式
示例代码地址

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值