上篇介绍了drone和gogs安装方法,这次介绍这两个如何使用,此篇文章主要介绍在物理机上进行发布。
此处用到的java项目地址:https://gitee.com/huningfei/demo-test
一 配置gogs
1.1 在Gogs中配置指定仓库的”.drone.yml“文件
1.2 ssh-drone.yml具体内容如下所示(适合在本机直接部署)
kind: pipeline
type: docker
name: test-pipeline
# 关闭自动设置Git镜像
# 此处可以不设置,将获取最新的git镜像
clone:
disable: true
steps:
# 设置Git镜像版本,下载仓库文件
# 如果上面没有设置clone,此处需要删除(如果不删除,在pipeline中将多一个clone,pipeline会出错)
- name: clone
image: drone/git:1.2.1
# 构建和编译Java项目
- name: test-build
image: maven:3.8.4
volumes:
# Maven缓存目录
- name: mvn-cache
path: /root/.m2
# 在Docker容器内执行的命令
commands:
- mvn clean install
# 发布项目
- name: test-deploy
image: appleboy/drone-ssh:latest
settings:
# 部署主机的IP
host: 192.168.2.45
# 部署主机的登录账号,需从Drone中获取密钥名ssh_user的值,创建方式见下面
username:
from_secret: ssh_user
# 部署主机的登录密码,需从Drone中获取密钥名ssh_pwd的值,创建方式见下面
password:
from_secret: ssh_pwd
# 端口号
port: 22
# 设置超时
command_timeout: 10m
# 编写脚本,可根据具体情况编写
script:
# 进入宿主机的“/home/app”目录(注意:先在宿主机上创建app目录)
- cd /home/app
# 删除jar包,我测试的工程名是test
# - rm -rf test.0.0.1-SNAPSHOT.jar
# 将编译后的jar包复制到"/home/app"下
- cp /home/mvn/.m2/repository/com/huningfei/demo/0.0.1-SNAPSHOT/*-SNAPSHOT.jar .
# 执行"/home/app"下的脚本(注意:需要在“/home/app”目录下创建start.sh文件)
- sh restart.sh
- sleep 7
# 进行测试访问
- curl http://localhost:8081/getAppName
# 挂载宿主机目录,对应"test-build"的Maven容器的目录
volumes:
- name: mvn-cache
host:
path: /home/mvn/.m2
# 对应Gogs仓库分支
trigger:
branch:
- master
1.3 restart.sh脚本内容
APP_NAME="demo-0.0.1-SNAPSHOT.jar"
#判断是否有老的进存在
is_exist(){
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}'`
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
echo "################停止服务#######################"
is_exist
if [ $? -eq 0 ]; then #如果是0,就代表进程存在,需要停止。
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}'`
kill -9 $pid
else
echo "${APP_NAME} is not running"
fi
echo "###################启动服务#############################"
nohup java -jar /home/app/demo-0.0.1-SNAPSHOT.jar >> nohup.log 2>&1 &
1.4 scp-drone.yml (scp 适用于在远程主机进行部署)
kind: pipeline
type: docker
name: test-pipeline
# 关闭自动设置Git镜像
# 此处可以不设置,将获取最新的git镜像
clone:
disable: true
steps:
# 设置Git镜像版本,下载仓库文件
# 如果上面没有设置clone,此处需要删除(如果不删除,在pipeline中将多一个clone,pipeline会出错)
- name: clone
image: drone/git:1.2.1
# 构建和编译Java项目
- name: test-build
image: maven:3.8.4
volumes:
# Maven缓存目录
- name: mvn-cache
path: /root/.m2
# 在Docker容器内执行的命令
commands:
- mvn clean install
- cp /root/.m2/repository/com/huningfei/demo/0.0.1-SNAPSHOT/*-SNAPSHOT.jar ./
# 发布项目
- name: scp files
image: appleboy/drone-scp:latest
settings:
# 部署主机的IP
host: 192.168.2.188
# 部署主机的登录账号,需从Drone中获取密钥名ssh_user的值,创建方式见下面
username: root
#from_secret: ssh_user
# 部署主机的登录密码,需从Drone中获取密钥名ssh_pwd的值,创建方式见下面
password: 12345
#from_secret: ssh_pwd
# 端口号
port: 22
target: /home/app/${DRONE_REPO_NAME} #目标路径
source: ./*.jar #源文件路径
- name: restart
image: appleboy/drone-ssh:latest
settings:
host: 192.168.2.188
# 部署主机的登录账号,需从Drone中获取密钥名ssh_user的值,创建方式见下面
username: root
#from_secret: ssh_user
# 部署主机的登录密码,需从Drone中获取密钥名ssh_pwd的值,创建方式见下面
password: 123456
# from_secret: ssh_pwd
# 端口号
port: 22
# 设置超时
command_timeout: 10m
script:
# 执行"/home/app"下的脚本(注意:需要在“/home/app”目录下创建start.sh文件)
- sh /home/app/restart.sh
- sleep 7
# 进行测试访问
- curl http://localhost:8081/getAppName
# 挂载宿主机目录,对应"test-build"的Maven容器的目录
volumes:
- name: mvn-cache
host:
path: /home/mvn/.m2
# 对应Gogs仓库分支
trigger:
branch:
- master
然后去2.188上查看目录
二 drone里的配置
2.1 在Drone中设置秘钥
2.2 在Drone中配置Gogs的仓库
会自动同步仓库到drone上,不像用jenkins那样需要先克隆下来了。
三 测试发布项目
经过上面的配置,基本可以测试项目发布了。
3.1 gogs上的web钩子配置
注意:需要在Drone中配置完指定仓库后,才会出现Web钩子的地址,否则地址为空。
点击”管理Web钩子“,按照如下配置,推送到Drone Server,当然你可以不配置,进行手动构建也行。
步骤如下:
测试主动推送 (以后这个仓库所有的改动,都会自动触发drone的构建任务),如果下面出现了
对钩,就代表推送成功。如下所示:
3.2 查看drone构建结果
再去目标服务器上查看启动的进程
刚才上面介绍的都是直接在物理机上进行的部署,下篇介绍下,如果构建docker形式的服务。