美文网首页DevOpsJenkinsjenkins for App
一步一步打造jenkins+docker+nodejs项目的自动

一步一步打造jenkins+docker+nodejs项目的自动

作者: 丰富多彩的薄校长 | 来源:发表于2016-09-26 18:16 被阅读11946次

一步一步打造jenkins+docker+nodejs项目的自动部署环境

介绍

jenkins+docker+nodejs 自动部署

亮点

  • 采用shell自定义脚本,控制集成部署环境更加方便灵活
  • 如果服务器更换,重新部署的工作量会比较小
  • 涉及的docker命令,会有讲解(不知道算不算亮点)

前提

  1. 代码通过git管理,放在了码云上(放在github或者其他平台也都可以)
  2. 服务器用的亚马逊aws(阿里云,青云也一样)
  3. 服务器用的ubuntu 16.04 (服务器系统不同,只是某些shell命令不同而已,windows服务器用户,呃,我敬你是条汉子)
  4. 客户端用的mac
  5. docker镜像平台为dockerhub

准备

  1. 服务器开通SSH
  2. 服务器安装Docker
  3. 掌握基本的shell命令(本文出现的shell命令都会进行说明,cd啥的就不说了...)

开始

docker运行jenkins

  1. 服务器 安装docker
  1. 服务器拉取docker jenkins镜像:docker pull jenkins:latest
  • 拉取jenkins latest版本镜像
  • docker pull jenkins:2.7.4 拉取jenkins 2.7.4版本镜像
  1. 服务器运行dokcer jenkins容器:sudo docker run -d --name jenkins_node -p 49002:8080 -v /var/jenkins_node:/var/jenkins_home jenkins:latest

    • 这句命令的意思是:在后台运行一个基于jenkins:latest镜像的容器, 容器的名字叫做 jenkins_node ,把容器的8080端口映射为49002端口,并且把服务器上的/var/jenkins_node目录挂在到docker容器上的/var/jenkins_home目录
    • -d 后台运行docker容器
      • 如果不加-d则,容器运行会占用此终端,如果终端关闭,则容器也相应关闭,jenkins就无法访问了。加上-d,容器会在后台运行。
    • --name 为容器起个别名
      • 如果不起别名,则系统会默认分配一个随机别名,类似gklasd_sdfwe。起了别名后,后续会通过该别名管理该docker容器,也就是管理jenkins。
    • -p docker容器端口映射
      • jenkins服务是运行在docker里的,docker默认不对外暴露端口的
    • -v 文件挂载
      • 如果不挂载,则jenkins所有log、用户配置文件都会在docker容器内,如果容器销毁,则jenkins得重新配置一遍。挂载出来方便jenkins迁移以及管理
      • 运行成功截图


        jenkins run
  2. 查看你服务器上的的/var/jenkins_node文件夹,当出现下图所有文件时,则说明jenkins启动成功,否则再等等...30秒左右即可


  3. 不出意外,浏览器访问http://host:49002 ,会出现如下界面

    • 打开initialAdminPassword文件,复制文件内容 initialAdminPassword文件位置为:


      为了方便,用mac演示一下
  4. initialAdminPassword文件内容粘贴到Administrator password

  5. 如果对于jenkins比较熟悉,下面7,8自己随意


  6. 等...


  7. 设置admin user


node项目配置

jenkins配置

插件安装

  1. 首页,点击系统管理 --> 管理插件


  2. 选择“可选插件”


  3. 右上角过滤SSH,--> 选择Publish Over SSH -->点击 直接安装


  4. 等待安装完成


系统设置

  1. 首页,点击系统管理 --> 系统设置


  2. 拉到最下面找到 "Publish over SSH" , 设置服务器的SSH信息


项目配置

  1. 首页,点击左上角”新建”


  2. General: 只填 项目名称即可


  3. 源码管理: 填写Git信息


  • 如果Git项目为私有项目,则需要点击Add添加你的Git账号,完成之后在这里选择你的Git账号


  1. 构建环境:参照下图
  • 图中代码如下:
    sudo docker stop node || true \
         && sudo docker rm node || true \
         && cd /var/jenkins_node/workspace/node \
         && sudo docker build --rm --no-cache=true  -t node  - < Dockerfile \
         && sudo docker run -d  --name node -p 3000:3000 -v /var/jenkins_node/workspace/node:/home/project node
    
  1. 保存,返回到首页
  2. 选择刚刚创建的项目,点击"立即构建"
  • 此时服务器本地硬盘上,/var/jenkins_node/workspace/下应该有node(你创建的jenkins项目名)文件夹
  • /var/jenkins_node/ 目录内容应该如下图


    为了方便查看,继续用mac演示目录
  • 构建成功,浏览器输入 http://host:3000 应该能看到下图内容

自动部署

如果想要git pull,jenkins就自动部署,那就继续往下看...

  1. jenkins --> 首页 --> 用户


  2. 设置 --> 点击 "show API Token"


  3. 复制API Token内容


  4. 返回首页 --> node --> 配置 --> 构建触发器 --> 选择 "触发远程构建" -->粘贴"API Token"内容到"身份验证令牌"


  5. 登陆git平台,找到你的项目,选择管理,选择webhook


  • URL 中 node 请替换为你在jenkins上创建的项目名称
  • token为复制的 API Token内容
  1. 此时你git push,会发现jenkins并没有自动构建,是因为jenkins的安全策略导致的,还需要如下设置
    • jenkins首页,选择 系统管理-->Configure Global Security(系统设置下面那个) 进行如下设置


至此,已完成 git push 后,jenkins 自动构建自动部署。

对于Docker感兴趣,可以看下这篇文章:Docker常用命令

相关文章

网友评论

  • c5e7163cbece:为什么我每次构建都会 新建docker的 image ,覆盖container
  • 6c9c164a3d58:作者你好,在执行到第四步的时候会有报错:docker: command is not found。请问如何处理呢?
  • 行书以鉴:能附上一个自动构建好node的例子就更好了
  • 撒贝龙:webhook 的URL还请教一下~ 怎么个格式啊?
    撒贝龙:OK了,是跨域策略的问题 :clap:
    撒贝龙:@行书以鉴 您好~ 我拼接了字段,用浏览器访问url可以触发构建,但是放到码云里,进行测试的时候会出现 “<html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> <title>Error 403 N” 我的选项是 ,填了URL 密码为空 ,没有勾选old,您遇到过这种情况吗?
    行书以鉴: @撒贝龙 就http://…………token=?的格式咯 你可以看第25张图
  • 6350d6af72d3:请问PRIVATE KEY 是在哪里生成的 宿主机还是jenkins容器里面?
  • 孙力:请问一下:Publish over SSH中 填写的ssh private key 是容器中的 private key 还是宿主中的private key?
    cab31ebee597:如果你用的是docker容器,需要进到容器里面生成密钥和公钥
    6350d6af72d3:兄弟 是填写你 vps的密码 Passphrase 这行
  • 前端黑板报:基本流程都有了,多谢
  • db2d91d7c04d:[root@li390-185 ~]# docker run -d --name jenkins_node -p 49002:8080 -v /var/jenkins_node:/var/jenkins_home jenkins:latest
    cd830f3312f75c52568471d1732a5f2bf6ec239f87386d4cb5defe483ef1d161

    [root@li390-185 jenkins_node]# ls -a
    . ..

    请问这里一直没有东西, 是肿么回事呢
    mahy:@gatinul 可以通过docker logs jenkins_node,查看容器内部的log显示。我也出现这个情况,是/var/jenkins_node文件夹的读写权限问题。chmod 777 /var/jenkins_node。然后docker restart jenkins_node就能解决。
    1d4928e8de87:请问这个问题后来怎么解决的 我试了应该不是没有权限的问题 但也是一直没有东西
    丰富多彩的薄校长:@白葛格 有可能是权限问题。你可以把/var/jenkins_node 改为你的home等不需要权限的地址
  • 39f7659cee50:按照你的步骤配置之后,应用访问不了,一般是什么情况?
    39f7659cee50:@丰富多彩的薄校长 如果能加下q,544207706,详谈不
    丰富多彩的薄校长:@upsnail 呃,要是再多提供一些信息,就更好了。应用访问不了的情况太多了,一步一步是环环相扣的。 不过这篇教程更多的是想要让大家理解Docker.如果明白了Docker,那么您自己不看这篇教程就能自己搭建环境了
  • 4e9650ccb1fa:写的很详细。有没有关于自动化测试工具的介绍呢?
    丰富多彩的薄校长:@雨奇 还没呢,不过有时间我可以来一篇
  • 小猫钓鱼君:应该缺少了node容器部分的说明,直接一笔带过了,在后面run了一个node容器,小白容易误解。不过写的不错。 :+1:
    22cfd45842dc:node容器还要另外去下载是吗?请问
    22cfd45842dc:怎样启动node容器 ?node容器已经存在了吗?
    丰富多彩的薄校长:@小猫钓鱼君 谢谢!

本文标题:一步一步打造jenkins+docker+nodejs项目的自动

本文链接:https://www.haomeiwen.com/subject/wdbqyttx.html