Fork me on GitHub

条形与波浪

随心博客 blog

bars and waves

使用 docker hub webhook 与 jenkins 自动部署

之前, 本着最少代码, 最简操作的原则, 我博客的自动部署是利用 travis 进行的. 在 travis 测试通过后执行部署脚本, 脚本其实就是 ssh 连到部署服务器后跑几个命令. 为了使 ssh 连接成功, 还需要把加密的 id_rsa 放入项目. 很明显, 这种方式的问题是项目代码与部署代码耦合程度很高, 而且实际要进行的操作也没少多少, 违背最简操作原则! 还是要把部署这件事交给最专业的工具 jenkins.

jenkins 部署最简方案

既然我们追求最简, 那么肯定是要上 docker, docker hup 又恰好支持监听 github 仓库自动构建镜像, 并发出 webhook. 至此部署方案已经形成: git push 以后 github 向 docker hub 发出 webhook, docker hub 开始构建镜像, 完成后向 jenkins 推送 webhook, 而 jenkins 只需要把最新镜像拉下来部署一下, 就完成了整个任务.

实操

  1. 首先安装 java 运行环境:
     sudo apt-get update
     sudo apt-get install default-jre
    然后安装并运行 jenkins.
    wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
    java -jar jenkins.war --httpPort=8080
    访问 http://your-jenkins-location:8080 完成一些 jenkins 基本配置向导后, 前往插件管理, 安装插件 "Generic Webhook Trigger Plugin", 以用来接收 docker hub 发出的 webhook.

jenkins-build-trigger

  1. 在 jenkins 里新建一个项目, 设置 build trigger 为 "Generic Webhook Trigger", 并可选设置 token, 同时注意到 webhook 地址为 http://JENKINS_URL/generic-webhook-trigger/invoke, 后面会用到.

    然后配置构建命令:

    docker pull derekchuank/bars-and-waves
    docker stop bars-and-waves-container || true
    docker rm bars-and-waves-container || true
    docker run --name=bars-and-waves-container --restart=always -d \
     -p 80:80 derekchuank/bars-and-waves
  2. 进入 docker hub 项目仓库, 连接相应的 github 仓库, 以进行镜像的自动构建. 进入 webhook 配置页面, 填入第二步获得的地址, 完成.