持续集成与持续交付 - 使用Drone构建镜像

使用Drone构建镜像

如何使用Gogs和Drone创建用于构建Docker映像的CI / CD流水线。

步骤1 - 配置Gogs
Gogs是一个自托管的Git服务,Drone是一个持续交付平台。它们可以建立CI/CD流水线,来构建Docker镜像。部署时,Drone服务的URL是必须的。
运行docker-compose启动两个服务

$ DRONE_HOST=https://2886795314-80-kitek05.environments.katacoda.com docker-compose up -d
Creating network "root_default" with the default driver
Creating volume "root_db-data" with local driver
Creating volume "root_gogs-data" with local driver
Pulling postgres (postgres:9.5)...
9.5: Pulling from library/postgres
62deabe7a6db: Pull complete
24c7b6331486: Pull complete
00b83e6d4b38: Pull complete
0e54c5150202: Pull complete
31dd3ef3701c: Pull complete
a7a29ab258fa: Pull complete
0d30412e41ab: Pull complete
f300ff05c105: Pull complete
6087bca444de: Pull complete
9a074670548c: Pull complete
487595f7c39d: Pull complete
317bb2885f18: Pull complete
e073a2b48253: Pull complete
d43ef7481147: Pull complete
Digest: sha256:8679e0d0658ec38b4ade78da75fcb9a249f16b5010081555186ef83c5c6fceda
Status: Downloaded newer image for postgres:9.5
Pulling gogs (gogs/gogs:latest)...
latest: Pulling from gogs/gogs
e95f33c60a64: Pull complete
6629f7b66676: Pull complete
95248f7b0231: Pull complete
1a4b11e4c1b9: Pull complete
1613ead921c8: Pull complete
37949e6160d8: Pull complete
38df9b14eb06: Pull complete
93d905b51231: Pull complete
Digest: sha256:7607fee4a463fdda91e7126fcc8504e7d972c4b80e79b2102c0de7175c1d3b81
Status: Downloaded newer image for gogs/gogs:latest
Pulling drone-server (drone/drone:0.8)...
0.8: Pulling from drone/drone
297640bfa2ef: Pull complete
6d34061bcde3: Pull complete
Digest: sha256:6056575462036f2579d17885532e5152e5478cf1c495ef183d2381a7e0cd8668
Status: Downloaded newer image for drone/drone:0.8
Pulling drone-agent (drone/agent:0.8)...
0.8: Pulling from drone/agent
297640bfa2ef: Already exists
bd501232d024: Pull complete
Digest: sha256:a46338f11e89afb1239331d8e4c22f3e44c867e1c81488314833e2d329d9ff40
Status: Downloaded newer image for drone/agent:0.8
Creating root_postgres_1 ... done
Creating root_gogs_1     ... done
Creating root_drone-server_1 ... done
Creating root_drone-agent_1  ... done
$ cat docker-compose.yml
version: '2'

services:
  postgres:
    image: postgres:9.5
    restart: always
    environment:
     - "POSTGRES_USER=gogsuser"
     - "POSTGRES_PASSWORD=gogspassword"
     - "POSTGRES_DB=gogs"
    volumes:
     - "db-data:/var/lib/postgresql/data"
  gogs:
    image: gogs/gogs:latest
    restart: always
    ports:
     - "10022:22"
     - "3000:3000"
    links:
     - postgres
    environment:
     - "RUN_CROND=true"
    volumes:
     - "gogs-data:/data"
    depends_on:
     - postgres
  drone-server:
    image: drone/drone:0.8
    ports:
      - 80:8000
      - 9000
    volumes:
      - /var/lib/drone:/var/lib/drone/
    restart: always
    links:
     - gogs
    environment:
      - DRONE_OPEN=true
      - DRONE_GOGS=true
      - DRONE_GOGS_URL=http://gogs:3000
      - DRONE_HOST=${DRONE_HOST}
      - DRONE_SECRET=SOME_RANDOM_STRING
  drone-agent:
    image: drone/agent:0.8
    command: agent
    restart: always
    depends_on:
      - drone-server
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - DRONE_SERVER=drone-server:9000
      - DRONE_SECRET=SOME_RANDOM_STRING

volumes:
    db-data:
      driver: local
    gogs-data:
      driver: local
$ 

访问:https://2886795474-3000-frugo04.environments.katacoda.com
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
创建一个项目
在这里插入图片描述登录
在这里插入图片描述将项目打开
在这里插入图片描述
启动私有Docker Registry

$ docker run -p 5000:5000 -d registry:2
Unable to find image 'registry:2' locally
2: Pulling from library/registry
ddad3d7c1e96: Pull complete 
6eda6749503f: Pull complete 
363ab70c2143: Pull complete 
5b94580856e6: Pull complete 
12008541203a: Pull complete 
Digest: sha256:bac2d7050dc4826516650267fe7dc6627e9e11ad653daca0641437abdf18df27
Status: Downloaded newer image for registry:2
d89123f5355546675ff654d285009fa2856f6dfe22252698e2de88f73017f122
$ 

将包含Dockerfile的项目下载下来

$ git clone https://github.com/katacoda/golang-http-server && cd golang-http-server
Cloning into 'golang-http-server'...
remote: Enumerating objects: 82, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 82 (delta 0), reused 1 (delta 0), pack-reused 78
Unpacking objects: 100% (82/82), done.
Checking connectivity... done.
$ 

修改仓库地址并推送上去

$ cat .drone.yml
pipeline:
  build:
    image: plugins/docker
    repo: docker-http-server
    tags: 
      - 1.0.0
      - 1.0
      - latest
$ sed -i 's|docker-http-server|2886795292-5000-elsy02.environments.katacoda.com/test/docker-http-server|g' .drone.yml
$ git remote add gogs http://test:test@2886795292-3000-elsy02.environments.katacoda.com/test/docker-http-server.git && \
>   git commit -am 'Updated Repo Path' && \
>   git push gogs master
[master fd414fe] Updated Repo Path
 1 file changed, 1 insertion(+), 1 deletion(-)
Counting objects: 40, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (38/38), done.
Writing objects: 100% (40/40), 1.60 MiB | 0 bytes/s, done.
Total 40 (delta 15), reused 0 (delta 0)
To http://test:test@2886795292-3000-elsy02.environments.katacoda.com/test/docker-http-server.git
 * [new branch]      master -> master
$ 

这个push会触发Drone构建,查看流水线状态
在这里插入图片描述

$ curl 2886795292-5000-elsy02.environments.katacoda.com/v2/_catalog
{"repositories":["test/docker-http-server"]}
$ curl 2886795292-5000-elsy02.environments.katacoda.com/v2/test/docker-http-server/tags/list
{"name":"test/docker-http-server","tags":["latest","1.0.0","1"]}
$ 

clone与build完毕,自动将构建好的镜像上传到Private Docker Registry里
在这里插入图片描述

运行容器

$ docker run -d -p 8080:80 2886795292-5000-elsy02.environments.katacoda.com/test/docker-http-server
Unable to find image '2886795292-5000-elsy02.environments.katacoda.com/test/docker-http-server:latest' locally
latest: Pulling from test/docker-http-server
d1426d011624: Pull complete 
dff425fdcaca: Pull complete 
ac2d6c278079: Pull complete 
1260ddb729fc: Pull complete 
229cfa4694f2: Pull complete 
c2bc20ef576d: Pull complete 
9f99ecd91c16: Pull complete 
1197308fa1ab: Pull complete 
465ddf26975a: Pull complete 
8fb177b04b86: Pull complete 
Digest: sha256:8027befe619d5501e2fb23126beb502591b73304cb494000d022e3b7b397b6b1
Status: Downloaded newer image for 2886795292-5000-elsy02.environments.katacoda.com/test/docker-http-server:latest
017b9c2e647160d147f3d4f7fa9c5ac1c937d1aa7cf8d0050412281f39cbea5c
$ docker ps
CONTAINER ID        IMAGE                                                                      COMMAND                  CREATED             STATUS                   PORTS                                                            NAMES
017b9c2e6471        2886795292-5000-elsy02.environments.katacoda.com/test/docker-http-server   "/app/main"              16 seconds ago      Up 14 seconds            0.0.0.0:8080->80/tcp                                             sharp_elbakyan
7cf2383aea37        registry:2                                                                 "/entrypoint.sh /etc…"   5 minutes ago       Up 4 minutes             0.0.0.0:5000->5000/tcp                                           quirky_turing
c7e0fb7d00d1        drone/agent:0.8                                                            "/bin/drone-agent ag…"   9 minutes ago       Up 9 minutes (healthy)   3000/tcp                                                         root_drone-agent_1
2d9d411a425b        drone/drone:0.8                                                            "/bin/drone-server"      9 minutes ago       Up 9 minutes             80/tcp, 443/tcp, 0.0.0.0:80->8000/tcp, 0.0.0.0:32768->9000/tcp   root_drone-server_1
3d61b6fbb34e        gogs/gogs:latest                                                           "/app/gogs/docker/st…"   9 minutes ago       Up 9 minutes             0.0.0.0:3000->3000/tcp, 0.0.0.0:10022->22/tcp                    root_gogs_1
1a5723f2a863        postgres:9.5                                                               "docker-entrypoint.s…"   9 minutes ago       Up 9 minutes             5432/tcp                                                         root_postgres_1
$ curl localhost:8080
<h1>This request was processed by host: 017b9c2e6471</h1>
$ 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王万林 Ben

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值