GithubHelp home page GithubHelp logo

nagaame / drone-golang-example Goto Github PK

View Code? Open in Web Editor NEW
32.0 2.0 18.0 18 KB

drone+gogs的示例项目

Home Page: https://kanda.me/2019/03/06/building-ci-cd-system-by-drone/

License: MIT License

Dockerfile 15.47% Go 84.53%
golang drone gogs

drone-golang-example's Introduction

Build Status

drone是一个基于容器的本地持续交付平台,和Jenkins是差不多的,然后配合轻量级的gogs来作为git管理,都是基于golang开发的很符合我的需求,我们来把它们结合作为一个完整的CI、CD平台。

首先我们要先安装docker,上次的篇幅我们已经说过了我就不赘述了。

需要的东西有:linux,docker,docker-compose,drone,gogs。

安装gogs和drone

配合荣锋亮大哥的yml文件和docker-compose我们可以很容易安装他们:

version: '3'
services:
  drone-server:
    image: drone/drone:latest
    ports:
      - "8080:80"
      - 8843:443
      - 9000
    volumes:
      - ./drone:/var/lib/drone/
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - DRONE_OPEN=true
      - DRONE_SERVER_HOST=drone-server
      - DRONE_DEBUG=true
      - DRONE_GIT_ALWAYS_AUTH=false
      - DRONE_GOGS=true
      - DRONE_GOGS_SKIP_VERIFY=false
      - DRONE_GOGS_SERVER=http://gogs:3000
      - DRONE_PROVIDER=gogs
      - DRONE_DATABASE_DATASOURCE=/var/lib/drone/drone.sqlite
      - DRONE_DATABASE_DRIVER=sqlite3
      - DRONE_SERVER_PROTO=http
      - DRONE_RPC_SECRET=ALQU2M0KdptXUdTPKcEw
      - DRONE_SECRET=ALQU2M0KdptXUdTPKcEw
  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
      - /var/run/docker.sock:/var/run/docker.sock
    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
  drone-agent:
    image: drone/agent:latest
    depends_on:
      - drone-server
    environment:
      - DRONE_RPC_SERVER=http://drone-server
      - DRONE_RPC_SECRET=ALQU2M0KdptXUdTPKcEw
      - DRONE_DEBUG=true
      - DOCKER_HOST=tcp://docker-bind:2375
      - DRONE_SERVER=drone-server:9000
      - DRONE_SECRET=ALQU2M0KdptXUdTPKcEw
      - DRONE_MAX_PROCS=5
  docker-bind:
     image: docker:dind
     privileged: true
    #  command: --storage-driver=overlay

我们创建一个存放docker-compose.yml文件的目录比如就叫gogs,然后我们把这些yml保存成docker-compose.yml,然后执行docker-compose来安装:

$ docker-compose up -d

配合yml文件,我们就安装好了drone-server和drone-agent还有gogs,然后我们用浏览器打开http://localhost:3000/来进入gogs并初始化它。

gogs初始化1

域名和应用URL记得一样接着我们创建一个管理员用户,然后其他的都默认,点击立即安装完成。

gogs初始化2

初始化成功之后我们可以在gogs里边创建一个仓库,然后登陆drone。

drone

打开浏览器输入http://localhost/直接进入drone,密码是gogs的你的刚刚的账户和密码。

drone

我们会看到一个刚刚创建的仓库,激活它!

激活之后,我们回到gogs那边,仓库的设置里边的webhook应该已经配置好了

web hook

我们可以测试web hook,如果没有问题的话,应该会提示成功。

上传源码

测试没有问题之后,我们初始化我们的代码文件夹为git仓库,然后push到gogos上边

test仓库

然后为你的仓库加上.drone.yml配置文件,drone-server会自动读取这个文件进行CI、CD操作等。以下这个是我们的示例文件

kind: pipeline
name: demo

steps:
  - name: build
    image: golang:1.11.4
    commands:
      - pwd
      - go version
      - go build .
      - go test demo/util

  #  - name: frontend
  #    image: node:6
  #    commands:
  #      - npm install
  #      - npm test

  - name: publish
    image: plugins/docker:latest
    settings:
      username:
        from_secret: docker_username
      password:
        from_secret: docker_password
      repo: example/demo
      tags: latest

  - name: deploy
    image: appleboy/drone-ssh
    pull: true
    settings:
      host: example.me
      user: root
      key:
        from_secret: deploy_key
      script:
        - cd /data
        - mkdir app/
        - cd /data/app
        - docker rmi -f example/demo
        - echo "login docker"
        - echo "login success, pulling..."
        - docker pull example/demo:latest
        - echo "image running"
        - docker run -p 8088:8088 -d example/demo
        - echo "run success"

我们首先进行简单的golang build和test操作然后根据Dockerfile文件把我们的程序构建成docker镜像,接着上传到docker hub中,然后通过drone-ssh插件部署这个镜像。

开始构建

有了配置文件之后,推送代码我们就可以去drone查看构建进度:

drone

drone的设置

在进入drone的时候,选择一个项目我们可以进行一些必要的设置,比如配置secrets,定时任务和徽章等等。

比如配置文件需要的密钥,用户名和密码,一些环境变量都可以在secrets设置,构建状态徽章可以在你的项目README.md文件加上去。

设置

项目加上徽章:

徽章

示例代码,本文完。

drone-golang-example's People

Contributors

nagaame avatar renovate-bot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

drone-golang-example's Issues

deploy 在 Windows 上不成功

 - name: deploy
    image: appleboy/drone-ssh
    pull: true
    settings:
      host: example.me
      user: root
      key:
        from_secret: deploy_key
      script:
        - cd /data
        - mkdir app/
        - cd /data/app
        - docker rmi -f example/demo
        - echo "login docker"
        - echo "login success, pulling..."
        - docker pull example/demo:latest
        - echo "image running"
        - docker run -p 8088:8088 -d example/demo
        - echo "run success"

我在 win10 上使用上面的配置,因为 docker 没有登录而导致 pull 失败,之后我又加上了

docker login 10.30.26.86:8888 --username ping --password Ping12345

没成功。
接着有尝试不直接使用 docker 命令,而使用 docker-compose,但是执行完,同样没有启动 docker 的运行实例。

Dependency Dashboard

This issue provides visibility into Renovate updates and their statuses. Learn more

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Detected dependencies

docker-compose
docker-compose.yml
  • example/demo latest
dockerfile
Dockerfile
  • golang 1.18.2
droneci
.drone.yml
  • golang 1.18.2
  • plugins/docker latest
  • appleboy/drone-ssh no version found

  • Check this box to trigger a request for Renovate to run again on this repository

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.