admin管理员组文章数量:1666595
环境配置
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 服务名
然后就会发布指定的服务
成功
示例代码地址
本文标签: 多个dronegogsSpringBoot
版权声明:本文标题:drone + gogs + springBoot自动化发布多个springBoot服务 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1730075434a1221714.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论