当前位置:   article > 正文

配置drone+docker+gogs+nodejs项目自动发布_drone vue

drone vue

最近学习了一下自动化部署相关的技术,记录一下自己的学习历程。

去年的时候腾讯云服务器搞活动,于是购买了一台云服务器用于学习。自己毕业后在第一家公司工作时,一直感觉项目上线是一件很头疼的事情,当时是采用pm2+nodejs的方式,项目上线就是登录到服务器上,手动替换js文件,然后用pm2重启进程。由于当时部门之间分工不明确,我作为开发有时候也要负责项目上线,经常每天晚上11点在家加班,那时候感觉还是挺痛苦的,于是感觉自动化部署是很有必要的。

自己学习的时候,也是锁定了两款自动化部署工具:jenkins、drone,然后选择了drone先学习一下,根据好多前辈的反馈,drone比jenkins更加小巧一点吧,但是也够用;然后git仓库,选择的是drone支持的gogs,功能可能没有GitHub多但是也够用了,个人感觉一些中小型公司完全是可以直接使用的。

大致安装配置步骤如下:

1、安装docker

  1、确保 yum 包更新到最新:
    sudo yum update
  2、卸载旧版本:
    sudo yum remove docker docker-common docker-selinux docker-engine
  3、安装需要的软件包
    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  4、设置yum源
    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  5、查看所有仓库中所有docker版本,并选择特定版本安装
    yum list docker-ce --showduplicates | sort -r
  6、安装docker
    sudo yum install docker-ce
  7、启动并加入开机启动
    sudo systemctl start docker
    sudo systemctl enable docker
  8、验证安装是否成功
    docker version

关于docker下载速度慢的问题,网上有很多解决办法,可以自行百度,我推荐一种方法:

2、docker加速:
  1、登录阿里云,控制台里面找到“容器镜像服务”,再找到“镜像加速器”选项:
  2、编辑文件:
    vim /etc/docker/daemon.json
    加入花括号以及里面的内容:
    {
      "registry-mirrors": ["xxxxx"]
    }

3、安装 docker-compose。

  1、执行以下命令下载:

    sudo curl -L "https://get.daocloud.io/docker/compose/releases/download/1.27.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

  2、赋予文件可执行权限

    sudo chmod +x /usr/local/bin/docker-compose

  3、执行docker-compose命令查看安装是否成功

    docker-compose version

4、准备 docker-compose.yml 文件,用于安装 drone、gogs、mysql 等等。

  1. version: '3'
  2. services:
  3. drone-server:
  4. image: drone/drone:latest
  5. ports:
  6. - "8080:80"
  7. - "8843:443"
  8. - "9000"
  9. volumes:
  10. - ./drone:/var/lib/drone/
  11. - /var/run/docker.sock:/var/run/docker.sock
  12. restart: always
  13. environment:
  14. - DRONE_OPEN=true
  15. - DRONE_SERVER_HOST=drone-server
  16. - DRONE_SERVER_PROTO=http
  17. - DRONE_LOGS_TRACE=true
  18. - DRONE_LOGS_DEBUG=true
  19. - DRONE_GOGS=true
  20. - DRONE_GOGS_SERVER=http://xxx:3000
  21. - DRONE_PROVIDER=gogs
  22. - DRONE_DATABASE_DATASOURCE=/var/lib/drone/drone.sqlite
  23. - DRONE_DATABASE_DRIVER=sqlite3
  24. - DRONE_RPC_SECRET=MWckgvhjqg4E3eQ0psgZX4iNCxoQiyU4LLvO4eXFFuHtrTkIy8vwcAc3erB5f9reM
  25. - DRONE_USER_CREATE=username:xxx,admin:true
  26. drone-agent:
  27. image: drone/agent:latest
  28. depends_on:
  29. - drone-server
  30. volumes:
  31. - /var/run/docker.sock:/var/run/docker.sock
  32. restart: always
  33. environment:
  34. - DRONE_RPC_SERVER=http://drone-server
  35. - DRONE_RPC_SECRET=MWckgvhjqg4E3eQ0psgZX4iNCxoQiyU4LLvO4eXFFuHtrTkIy8vwcAc3erB5f9reM
  36. - DRONE_LOGS_TRACE=true
  37. - DRONE_LOGS_DEBUG=true
  38. gogs:
  39. image: gogs/gogs:latest
  40. ports:
  41. - "10022:22"
  42. - "3000:3000"
  43. volumes:
  44. - ./data/gogs:/data
  45. depends_on:
  46. - mysql
  47. mysql:
  48. image: mysql:5.7.16
  49. volumes:
  50. - ./gogs/mysql:/var/lib/mysql
  51. ports:
  52. - 3308:3306
  53. command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
  54. environment:
  55. MYSQL_ROOT_PASSWORD: pass
  56. MYSQL_DATABASE: gogs
  57. MYSQL_USER: gogs
  58. MYSQL_PASSWORD: pass
  59. TZ: Asia/Shanghai

   以上有些用x代表的地方换成自己的ip或者名称就好。

5、将 docker-compose.yml 文件上传到云服务器,目录自己定就好,然后执行:

    docker-compose up -d

  之后,docker就会自动安装好:drone、gogs、mysql

6、然后就是配置gogs和drone,首先登录 http://ip:3000/,第一次登录需要配置,如下图:

   之后点击立即安装,gogs就安装好了。

7、配置drone,打开http://ip:8080/,初始登录账号密码就是上面最后一张图里面你配置的gogs的账号密码,之后就会进入到主界面。

8、创建node项目

  自己随便在gogs创建一个nodejs项目,比如一个简单的后端server就行,只要可以运行就可以,然后上传到gogs

9、登录drone,同步项目

10、同步结束之后,再次登录gogs,打开项目仓库,仓库设置,管理web钩子,会发现自动多出了一条钩子,可以打开并测试它

11、之后在nodejs项目根目录添加.drone.yml文件,我自己想的是,项目一共分为3个分支:devlopment, test, master,服务器也有3个,并对应这三个分支的运行环境

  1. pipeline:
  2. # 加载缓存 node_modules
  3. restore-cache:
  4. image: drillster/drone-volume-cache
  5. restore: true
  6. mount:
  7. - ./node_modules
  8. volumes:
  9. - /tmp/cache:/cache
  10. when:
  11. # 触发事件类型[push], [pull_request]
  12. event: [push, pull_request]
  13. # 触发分支
  14. branch: [devlopment, test, master]
  15. # install
  16. install:
  17. image: node:12-alpine
  18. commands:
  19. # 删除文件 npm install
  20. - rm -rf package-lock.json
  21. - npm --registry https://registry.npm.taobao.org install
  22. when:
  23. event: [push, pull_request]
  24. branch: [devlopment, test, master]
  25. # 更新node_modules缓存
  26. rebuild-cache:
  27. image: drillster/drone-volume-cache
  28. rebuild: true
  29. mount:
  30. - ./node_modules
  31. volumes:
  32. - /tmp/cache:/cache
  33. when:
  34. event: [push, pull_request]
  35. branch: [devlopment, test, master]
  36. # push
  37. dev-push:
  38. image: appleboy/drone-scp
  39. host: xxx # 可以写到secret中
  40. port: 22
  41. username: xxx
  42. password: xxx
  43. target: /app/vue-manage-server
  44. source: .
  45. rm: true
  46. when:
  47. event: [push, pull_request]
  48. branch: [devlopment]
  49. # push
  50. test-push:
  51. image: appleboy/drone-scp
  52. host: xxx # 可以写到secret中
  53. port: 22
  54. username: xxx
  55. password: xxx
  56. target: /app/vue-manage-server
  57. source: .
  58. rm: true
  59. when:
  60. event: [push, pull_request]
  61. branch: [test]
  62. # push
  63. master-push:
  64. image: appleboy/drone-scp
  65. host: xxx # 实际应用中,可以写到secret中
  66. port: 22
  67. username: xxx
  68. password: xxx
  69. target: /app/vue-manage-server
  70. source: .
  71. rm: true
  72. when:
  73. event: [push, pull_request]
  74. branch: [master]
  75. # run
  76. dev-run:
  77. image: appleboy/drone-ssh
  78. host: xxx
  79. username: xxx
  80. password: xxx
  81. port: 22
  82. command_timeout: 300s
  83. script:
  84. - cd /app/vue-manage-server
  85. - mkdir seresr
  86. when:
  87. event: [push, pull_request]
  88. branch: [devlopment]
  89. # run
  90. test-run:
  91. image: appleboy/drone-ssh
  92. host: xxx
  93. username: xxx
  94. password: xxx
  95. port: 22
  96. command_timeout: 300s
  97. script:
  98. - cd /app/vue-manage-server
  99. - mkdir seresr
  100. when:
  101. event: [push, pull_request]
  102. branch: [test]
  103. # run
  104. master-run:
  105. image: appleboy/drone-ssh
  106. host: xxx
  107. username: xxx
  108. password: xxx
  109. port: 22
  110. command_timeout: 300s
  111. script:
  112. - cd /app/vue-manage-server
  113. - docker build -t vue-manage-server .
  114. - docker run -d -p 4000:4000 vue-manage-server
  115. when:
  116. event: [push, pull_request]
  117. branch: [master]

 上面的文件其实挺好理解,xxx替换成自己的,有些路径也替换成自己的。

12、由于上面最后发布项目利用了docker,所以需要项目添加 Dockerfile 文件,根据你自己的项目自行编写文件

  1. FROM node:12-alpine
  2. WORKDIR /usr/src/app
  3. COPY package.json ./
  4. COPY package-lock.json ./
  5. # in workdir install
  6. RUN npm --registry https://registry.npm.taobao.org install
  7. # Bundle app source
  8. COPY . ./
  9. EXPOSE 4000
  10. CMD ["node","server.js"]

13、把.drone.yml和Dockerfile文件推上去之后,可能会报错:untrusted repositories cannot mount host volumes,在drone设置里改一下配置即可:

 14、执行结果如下,那么就算成功了,整个流程当然肯定有不太稳妥的地方,毕竟第一次学习。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号