docker+gogs+drone+mysql+registry自动发布

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,deploy

drone.yml=========
kind: pipeline
name: default

steps:

  • 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/timezone

COPY ./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:2

docker 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界面

完成。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值