GitHub仓库

由于现在的代码基本上都是多人合作开发,所以肯定会用到像 git 这样的版本控制工具

所以这里使用 GitHub 来做一个演示

首先我们需要在github上新建一个仓库

点击New来新建一个仓库

输入一个名字

以及描述后点击 create

然后将代码上传到GitHub上

这里我上传的是一个简单的 hello world 的demo

到这里要部署的代码就准备完成了,接下来需要编写 Dockerfile 来告诉 docker 该怎么打包我们的项目

Dockerfile编写

首先我们在项目的根目录下添加一个 Dockerfile 文件

该文件代码如下:

FROM node:alpine
MAINTAINER luohaoyu0920@foxmail.com
ENV TZ = Asia/Shanghai #将代码移动到容器中的 /ndoe 路径下
COPY . /node #指定工作目录
WORKDIR /node #安装PM2
RUN npm install pm2 -g #指定时区
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone #暴露容器的3000端口
EXPOSE 3000 #启动服务
CMD [ "pm2-runtime", "npm", "--", "start" ]

这里需要注意,最好在 package.json中完成依赖的安装,不然路径上很可能出现问题

完整项目代码:https://github.com/lhy2813419591/JenkinsTest

上述代码中 Expose 暴露的端口就是你的项目监听的端口

至于时区的设置根据大家的需求自己决定是否设置

这里我是使用了 在镜像中 使用 pm2 来托管我的项目

虽然docker可以给我们一个相对独立的环境,但平滑启动等功能并不提供,所以这里我使用了 pm2 来启动项目

Jenkins构建

刚才初步的准备工作已经完成了

接下来就需要创建 Jenkins 的构建任务

这里输入构建任务的名称

选择自由风格的项目,然后点击确定进入下一步

然后勾选限制项目运行的节点

输入你希望该构建运行的服务器节点(在之前 over publish中添加的服务器)

输入过后会告诉你选中了几个节点

然后就是源码管理选择 git

没有凭据的需要先添加凭据

然后设置构建触发器,这里如果需要当git上面有新的 push 的时候就自动构建

则需要设置构建出发器,不需要的小伙伴可以自行跳过

身份验证令牌设置如下:

  jenkins --> 首页 --> 用户

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

这样就获取了一个 Api Token 将其复制到身份验证令牌处即可

设置完身份验证令牌后我们需要进入 github进行相关设置

进入setting 后选择 webhook

然后添加 webhook

这里的url在 Jenkins 上可以看到

把这个路径复制到github

如果出现403则需要设置一下用户权限

在全局安全设置中允许匿名用户操作

我这里为了方便就直接设置为所有用户可以做任何事

然后回到github

点击redeliver

然后看到201就说明配置完成了

这样我们就只差最后的执行脚本了

我们回到 Jenkins 继续进行设置

接下来要设置的是构建环境

这里需要填写的实际上只用填写远程工作目录以及构建完成后执行的命令行语句

cd /root/jenkins/workspace/JenkinsTest #访问指定的远程工作目录
sudo docker stop node #停止名为node的容器
sudo docker rm node #移除名为node的容器
sudo docker rmi node #移除名为node的镜像
sudo docker build --rm --no-cache=true --tag node /root/jenkins/workspace/JenkinsTest #build镜像,并命名为node
sudo docker run -dit --name node -p 9001:3000 -v /root/jenkins/workspace/JenkinsTest:/node node #运行名为node的镜像,将容器的3000端口映射到9001端口

如下图所示

保存后点击立即构建即可执行,不需要push来触发

然后访问部署节点的 9001 端口就能访问自动构建的 express 项目

如果步骤没有问题,但无法访问项目建议前往服务器的控制台查看安全组规则,开放对应的端口

查看项目的日志信息

docker logs node #node是容器的name

完整代码:https://github.com/lhy2813419591/JenkinsTest

node项目自动化部署--基于Jenkins,Docker,Github(3)自动化部署的更多相关文章

  1. node项目自动化部署--基于Jenkins,Docker,Github(1)安装Jenkins

    前言 每次项目代码更新后都要重新部署,如果只有一台服务器还好. 但是如果是分布式系统,动不动就很多台服务器,所以代码的自动部署就显得十分重要了. 这里用几篇文章来记录一下如何使用Jenkins,Doc ...

  2. node项目自动化部署--基于Jenkins,Docker,Github(2)配置节点

    上一篇文章中准备工作已经完成的差不多了 这一篇主要讲解 Jenkins 上面的相关配置 为了让代码部署到所有的子节点上 所以我们首先需要在 Jenkins 中添加我们希望代码部署到的节点 配置节点 首 ...

  3. 部署基于Gitlab+Docker+Rancher+Harbor的前端项目这一篇就够了

    部署基于Gitlab+Docker+Rancher+Harbor的前端项目这一篇就够了 安大虎 ​ momenta 中台开发工程师 6 人赞同了该文章 就目前的形势看,一家公司的运维体系不承载在 Do ...

  4. 基于 Jenkins+Docker+Git 的CI流程初探

    在如今的互联网时代,随着软件开发复杂度的不断提高,软件开发和发布管理也越来越重要.目前已经形成一套标准的流程,最重要的组成部分就是持续集成(Continuous Integration,CI)及持续部 ...

  5. .NET Core微服务之基于Jenkins+Docker实现持续部署(Part 1)

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.CI, CD 与Jenkins 互联网软件的开发和发布,已经形成了一套标准流程,最重要的组成部分就是持续集成(Continuous i ...

  6. 通过Jenkins + Docker实现antdPro自动化推送私服、自动容器化部署功能

    Docker与Docker私服 1. 安装docker https://docs.docker.com/install/ 2. 配置docker镜像加速 https://www.daocloud.io ...

  7. .NetCore基于Jenkins和Gogs的自动化部署方案

    准备工作 Jenkins和gogs的安装配置可以看前两篇:Jenkins安装.配置与说明  和 gogs安装与说明(docker) 此外,因为还要安装.net core的SDK和Git工具: 安装.n ...

  8. Asp.net Core Jenkins Docker 实现一键化部署

    写在前面 在前段时间尝试过用Jenkins来进行asp.net core 程序在IIS上面的自动部署.大概的流程是Jenkins从git上获取代码 最开始Jenkins是放在Ubuntu的Docker ...

  9. .Net core 使用Jenkins + Docker + Azure Devops 傻瓜式部署

    这几天一直在搞 Jenkins + Docker + Azure Devops 部署,因为这种方式部署真的非常的省心,而且速度快,方便快捷,等等无数优点,感谢我的单身领导的支持,当然也感谢 晓晨大神, ...

随机推荐

  1. Java多态性详解——父类引用子类对象

    来源:http://blog.csdn.net/hikvision_java_gyh/article/details/8957456 面向对象编程有三个特征,即封装.继承和多态. 封装隐藏了类的内部实 ...

  2. NOI2019 游记

    day-1 广二真好看QAQ (要是我也能在这里读书就好了) 提供的餐饮好评QAQ 发现室友是雅礼集训时候的室友,衡水小姐姐zyn. 但是寝室没有网没有信号没有桌子真的不良心啊...... 发现小卖部 ...

  3. 微信小程序_(组件)scroll-view可滚动视图

    微信小程序scroll-view组件官方文档 传送门 提前准备:使用<view>组件制作五条撑满的横向区域 <!--index.wxml--> Cynical丶Gary < ...

  4. Vue_(基础)Vue中的指令

    Vue.js中文文档 传送门 Vue的指令:其实就是单个JavaScript表达式,一般来说是带有v-前缀   Vue指令: v-model:数据双向绑定: v-text:以纯文本方式显示数据: v- ...

  5. 「UVA12293」 Box Game

    题目链接 戳我 \(Solution\) 这道题第一眼看样例,猜了个结论偶数\(Alice\)赢,否则\(Bob\)赢,打了一发,交了上去果不其然的\(wa\)了,第二次猜\(2\)的幂次方\(Ali ...

  6. linux rpm包管理 yum管理

    1. 软件包的管理 RPM的定义:RPM就是Red Hat Package Manger(红帽软件包管理工具)的缩写. RPM包不需要编译,本身就是二进制,而源码包需要先编译成系统识别的二进制文件,才 ...

  7. SRS之RTMP的TCP线程(即监听线程)

    本文分析的是 SRS 针对 rtmp 的端口建立的 tcp 线程.具体建立过程: SRS之监听端口的管理:RTMP RTMP 的 TCP 线程中各个类之间 handler 的关系图 1. RTMP之T ...

  8. LeetCode 75. 颜色分类(Sort Colors)

    题目描述 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色 ...

  9. MySQL中获取天、周、月等数据

    MySQL中获取天.周.月等数据 1.今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 2.昨天 SELECT * FROM 表名 ...

  10. Mac Vmware NAT模式

    1.NAT模式原理 2.MAC上关于Vmware的配置 1)/Library/Preferences/VMware Fusion/networking MacBookPro:~ zhangxm$ vi ...