记录Ubuntu服务器搭建Gogs+Drone自动化构建平台

安装Gogs

此步骤不再赘述,另外一篇文章有记录:https://www.jianshu.com/p/a867f1f39f0f

安装Drone

请参考官方文档进行安装,链接:https://docs.drone.io/

运行起来一个完整的Drone,需要安装Drone Server和Drone Runner,这里注意:Runner会去实际执行pipline,如果没有安装运行对应的runner,那么不会执行pipline,比方说,yaml文件写的type是ssh,则需要另外安装drone-runner-ssh,type为docker则需要安装drone-runner-docker:1,因为本人实际需要,本文将会将这两个镜像都拉下来运行。

直接run镜像,找不到会自动前去拉取


docker run -d \
  -v /export/drone/data:/data \
  -e DRONE_AGENTS_ENABLED=true \
  -e DRONE_GOGS_SERVER=http://gogs的域名或ip地址:端口 \
  -e DRONE_RPC_SECRET=密钥key \
  -e DRONE_SERVER_HOST=drone的web网页域名或ip地址:端口 \
  -e DRONE_SERVER_PROTO=http \
  -e DRONE_USER_CREATE=username:管理员名称(gogs用户),admin:true \
  -e TZ="Asia/Shanghai" \
  -p web端口:80 \
  --restart=always \
  --name=drone \
  drone/drone:1

docker run -d \
  -e DRONE_RPC_PROTO=http \
  -e DRONE_RPC_HOST=web域名或ip地址:端口 \
  -e DRONE_RPC_SECRET=密钥key \
  -p 4001:3000 \
  --restart always \
  --name runner-ssh \
  drone/drone-runner-ssh

docker run -d \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e DRONE_RPC_PROTO=http \
  -e DRONE_RPC_HOST=web域名或ip地址:端口 \
  -e DRONE_RPC_SECRET=密钥key \
  -e DRONE_RUNNER_CAPACITY=2 \
  -e DRONE_RUNNER_NAME=runner-docker \
  -e TZ="Asia/Shanghai" \
  -p 4002:3000 \
  --restart=always \
  --name=runner-docker \
  drone/drone-runner-docker:1

检查配置是否正常

请细心检查以下步骤是否正常,某一步出错将可能导致无法正常使用

  • 登录drone激活仓库,登录地址为上面的drone的web网页域名或ip地址:端口
  • 登录后,正常会出现gogs的仓库,第一次点进仓库后,会出现Activate repository字样的按钮,点击进行激活
  • 在仓库编写正确规范的.drone.yml文件
  • 登录gogs,进入仓库设置,找到管理 Web 钩子,进入钩子,注意检查推送地址是否有误,比方说出现2个http,如果有,进行修正
  • 找到最底部的最近推送记录,右边有个测试推送,点击进行测试推送
  • 登录drone后台,查看是否收到推送,并且成功执行相应的操作(yaml文件写的命令操作)

如果无法正常执行,应当登录服务器,查看对应drone-runner的docker日志观察Runner与Drone的连接是否正常,如果是正常,则查看drone-server的docker日志,进行排查问题,docker 查看日志指令:docker logs -f 容器ID

  • 如果上述能正常推送,drone-runner也能正常按照yaml文件指定的命令进行操作,则说明整套流程已经正常完成,如果中途出现异常,应当多查看drone-server和drone-runner的docker日志,另外yaml文件配置也务必正确规范

重新部署

如果发现镜像有误,需要重新部署,则停止容器,删除容器及镜像,重新正确设置run起来即可

docker stop 容器ID
docer rm 容器ID
docker rmi 镜像ID

Yaml文件撰写

https://nodeca.github.io/js-yaml/ 可以检查yml语法是否正常,注意:一次只能检查一个文档

ssh demo(注:下面的用户名、密码通常不会使用明文,而是使用drone后台的Secrets)

    ---
    kind: pipeline
    type: ssh
    name: default

    server:
      host: 服务器地址
      user: 用户名
      password:
        from_secret: 密码

    steps:
    - name: greeting
      commands:
      - echo hello world

docker demo

    kind: pipeline
    type: docker
    name: default

    steps:
    - name: greeting
      image: alpine
      commands:
      - echo hello
      - echo world

根据git TAG触发的pipline(比方说:git打上某个tag,则触发某个操作,例如:pull代码,build镜像,重启容器等)

---
kind: pipeline
type: ssh
name: default

server:
  host: 服务器地址
  user: 用户名
  password:
    from_secret: 密码

steps:
- name: greeting
  commands:
  - echo hello world
  when:
      event: 
      - tag

结尾

出错多看日志,多动脑

你可能感兴趣的:(记录Ubuntu服务器搭建Gogs+Drone自动化构建平台)