docker+gogs+drone+mysql+registry自动发布
准备工作:
 1.docker-compose.yml 目的:用于一键安装gogs,mysql,drone(gogs用于代码管理,mysql用于存储gogs相关数据,drone用于获取到代码变更进行发布管理)docker-compose.yml=
 version: ‘3’
 services:
 drone-server:
 image: drone/drone:latest
 ports:
 - 8080:80
 volumes:
 - ./drone:/var/lib/drone/
 - /var/run/docker.sock:/var/run/docker.sock
 restart: always
 environment:
 - DRONE_OPEN=true
 - DRONE_SERVER_HOST=http://192.168.116.101:8080
 - DRONE_SERVER_PROTO=http
 - DRONE_LOGS_TRACE=true
 - DRONE_LOGS_DEBUG=true
 - DRONE_GOGS=true
 - DRONE_GOGS_SERVER=http://192.168.116.101:3000
 - DRONE_PROVIDER=gogs
 - DRONE_DATABASE_DATASOURCE=/var/lib/drone/drone.sqlite
 - DRONE_DATABASE_DRIVER=sqlite3
 - DRONE_RPC_SECRET=diu8vh1S9QVXc4l7QmAPlkbucXkBXrQAknCo5gWw6DYwWJJdkaM82UYXIoV1DfWnn
 - DRONE_USER_CREATE=username:root,admin:true
 drone-agent:
 image: drone/agent:latest
 depends_on:
 - drone-server
 volumes:
 - /var/run/docker.sock:/var/run/docker.sock
 restart: always
 environment:
 - DRONE_RPC_SERVER=http://192.168.116.101:8080
 - DRONE_RPC_SECRET=diu8vh1S9QVXc4l7QmAPlkbucXkBXrQAknCo5gWw6DYwWJJdkaM82UYXIoV1DfWnn
 - DRONE_LOGS_TRACE=true
 - DRONE_LOGS_DEBUG=true
 gogs:
 image: gogs/gogs:latest
 ports:
 - “10022:22”
 - “3000:3000”
 volumes:
 - ./data/gogs:/data
 depends_on:
 - mysql
 mysql:
 image: mysql:5.7.16
 volumes:
 - ./gogs/mysql:/var/lib/mysql
 ports:
 - 3308:3306
 command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
 environment:
 MYSQL_ROOT_PASSWORD: pass
 MYSQL_DATABASE: gogs
 MYSQL_USER: gogs
 MYSQL_PASSWORD: pass
 TZ: Asia/Shanghai
docker-compose.yml=
 2…drone.yml 目的:用于定义drone代码管理步骤,build,publish,deploydrone.yml=========
 kind: pipeline
 name: defaultsteps:
• name: build
 image: ypzaq1asdf/maven:latest
 commands: 
  • mvn clean package -Dmaven.test.skip=true
• ls
 when:
 branch: master
 event: [ push ]• name: publish
 image: plugins/docker
 settings:
 username:
 password:
 insecure: true
 repo: 192.168.116.101:5000/root/demo1
 registry: 192.168.116.101:5000
 dockerfile: Dockerfile
 tags:
 - “demo1-latest”
 when:
 branch: master
 event: [ push ]• name: deploy
 image: appleboy/drone-ssh
 settings:
 host: 192.168.116.101
 username: root
 port: 22
 password: 123456
 script:
 - docker rm -f demo1 || true
 - docker rmi 192.168.116.101:5000/root/demo1:demo1-latest || true
 - docker pull 192.168.116.101:5000/root/demo1:demo1-latest
 - docker run -d -p 3007:3007 --name demo1 192.168.116.101:5000/root/demo1:demo1-latest
 when:
 branch: master
 event: [ push ]
drone.yml========3.Dockerfile 用于镜像制作,用于drone的publish阶段
 ============Dockerfile ====================FROM 192.168.116.101:5000/williamyeh/java8:latest
ENV VERSION 1.0-SNAPSHOT
 ENV MALLOC_ARENA_MAX=1
 ENV JAVA_OPTS="-server -Xmx2g -Xms2g -Xmn512m -Xss256k -XX:MaxMetaspaceSize=128m"RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 
 && echo “Asia/Shanghai” > /etc/timezoneCOPY ./target/demo1-0.0.1-SNAPSHOT.jar /app/app.jar
EXPOSE 3007
CMD [“java”, “-jar”, “/app/app.jar”]
==========================================
4.制作maven镜像 目的,用于编译项目,用于drone的build阶段
步骤1:将本地项目用到的仓库(注意:本地仓库一般过于庞大,所以,我们可以本地仓库。.m2下的repository名称先更改,更改之后,回到本地项目重新拉取项目所需要的jar包,这样的话,最后我们得到的repository就会很小500M左右)
 步骤2:将.m2文件夹打包copy到服务器上然后解压,(注意linux服务器文件名称是不能以.开头的,所以,文件名称可以更改。比如,我们把.m2的名称改为m2)
 步骤3:将Dockerfile和m2文件夹放在同一层目录(m2文件夹包含两个文件repository和setting.xml,你的setting最好添加aliyun的maven通道,不然编译项目的时候 会很慢)
 步骤3.1 此时如果没有在dockerhub上注册,需要在dockerhub上注册自己的账号,如果已经有了忽略此步
 步骤3.2 在我们自己的服务器中登录dockerhub ,命令:docker login --username= hanmeimei
 步骤4:运行命令docker build --rm=true -t ypzaq1asdf/maven: demo1-latest . 制作镜像(注意这个. ,我们可以理解为在当前目录下执行)
 注意:ypzaq1asdf 这个是你自己在dockerhub注册的dockerID,这个不能乱写,不然将我们制作的镜像推送到dockerhub上时,会失败
 步骤5:推送你的maven镜像到dockerhub上 命令docker push ypzaq1asdf/maven: demo1-latest=(4.1)
 DOCKERFILE
 FROM maven:3.6.1-jdk-8
 COPY m2 /root/.m2 ##注意,这个m2为当前你要制作镜像的文件夹名称=(4.2)
 docker build --rm=true -t ypzaq1asdf/maven: demo1-latest .5.docker安装docker自带仓储,用于存放公司项目打包之后的镜像和我们平时用到的jdk8
 Docker 官方提供了一个搭建私有仓库的镜像 registry ,只需把镜像下载下来,运行容器并暴露5000端口,就可以使用了。
 docker pull registry:2docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --name myregistry registry:2
Registry服务默认会将上传的镜像保存在容器的/var/lib/registry,我们将主机的/opt/registry目录挂载到该目录,即可实现将镜像保存到主机的/opt/registry目录了。
 浏览器访问http://192.168.116.101:5000/v2,出现下面情况说明registry运行正常。一般情况下,我们会推送镜像到我们的私库,比如我们要推送下图的williamyeh/java8到我们的私库
要通过docker tag将该镜像标志为要推送到私有仓库:
 docker tag williamyeh/java8:latest localhost:5000/williamyeh/java8:latest通过 docker push 命令将 williamyeh/java8 镜像 push到私有仓库中:
 docker push localhost:5000/williamyeh/java8:latest访问 http://192.168.116.101:5000/v2/_catalog 查看私有仓库目录,可以看到刚上传的镜像了:
下载私有仓库的镜像,使用如下命令:
 docker pull localhost:5000/镜像名:版本号
 例如
 docker pull localhost:5000/williamyeh/java8:latest注意:
 Docker push私库时遇到:Get https://192.168.0.180:5000/v1/_ping: http: server gave HTTP response to HTTPS client
 解决方法: 编辑”/etc/docker/daemon.json“文件,不存在则创建”daemon.json“文件。
 [root@ecs-proxy images]# vim /etc/docker/daemon.json
 在文件中写入: { “insecure-registries”:[“192.168.1.252:5000”] }
 保存退出后,重启docker。
 [root@ecs-proxy images]# systemctl restart docker肉戏来了:嘿嘿
 主流程:
 步骤1:1.》将1准备好docker-compose.yml文件,放在linux服务器上,创建文件夹docker-compose,放入此文件夹,然后cd docker-compose 进入文件夹
 ,使用命令 docker-compose up -d ,好了,我们的drone,mysql,gogs就用docker启起来了
 然后就是配置gogs和drone,首先登录 http://ip:3000/,第一次登录需要配置,如下图:之后点击立即安装,gogs就安装好了。,注意这几张图是盗的,因为我已经安装完了,嘿嘿
2.》配置drone,打开http://ip:8080/,初始登录账号密码就是上面最后一张图里面你配置的gogs的账号密码,之后就会进入到主界面。

   
  3.》创建新的代码管理仓库注意:一下几张图里面的项目名称,因为我已经有了demo1了,为了截图,重新创建的仓库,请将demo3改成demo1
填写完毕,点击创建仓库,如下图:
到了这一步,代表创建新的项目代码管理仓库成功了
 再切换到drone页面,点击SYNC同步按钮可以看到,我们刚刚创建的demo3项目已经成功同步到drone上了,但是,此时,我们的项目还没有激活
点击root/demo3模块上蓝色的ACTIVATE ,进入如下页面
点击ACTIVATE REPOSITORY
勾选Trusted之后,点击SAVE按钮(如果没有Trusted按钮,那说明你的.drone.yml文件的drone构造时少了一行代码
)


点击SAVE按钮之后回到gogs页面,点击仓库设置

点击Web钩子

可以看到,我们已经自动生成了web钩子,(我这里配置错误,出现了两个http,点击那个笔按钮,修改)

推送地址如上图,点击更新Web钩子,其他不用更改,更新钩子之后,这时,我们可以进行推送测试,点击 蓝色的 测试推送 按钮。

可以看到,有个绿色钩子,表示推送成功了。

步骤2:
1.》将准备工作2和3准备的Dockerfile和.drone.yml文件放入我们创建的git项目,然后完善我们的demo3项目使之本地跑起来为准,然后提交整个项目(注意我们的项目配置文件里面git仓库地址一定要是我们刚刚创建的gogs的git地址)

此时,利用git add . /git commit -m ‘add’ /git push 提交代码

可以看到gogs里面已经有代码了,在看我们的drone界面

完成。