从零搭建docker+jenkins+node.js自动化部署环境的方法

本次案例基于CentOS 7系统

  • 适合有一定docker使用经验的人阅读
  • 适合有一定linux命令使用经验的人阅读

1、docker部分

1.1、docker简介

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口

1.2、docker架构

简单的说,docker就是一个轻量级的linux系统。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。docker架构如图所示:

1.3、docker虚拟机管理命令

1.4、安装docker

更新软件库

yum update -y

安装docker

yum install docker -y

1.5、启动docker服务

启动docker服务

service docker start

其它相关命令

 service docker restart // 重启docker服务
 service docker stop  // 停止docker服务

2、node部分

可以通过koa框架随便写一个hello-world项目,然后在项目的根目录下新建一个Dockerfile文件

Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

笔者自己的Dockerfile文件配置信息如下,熟悉docker的人可以自行配置

# Dockerfile
# 使用node做为镜像
FROM node
# 在容器中创建该目录
RUN mkdir -p /home/project
# 设置容器的工作目录为该目录
WORKDIR /home/project
# 向外提供3000端口
EXPOSE 3000
# 容器创建完成后执行的命令
CMD npm install --registry=https://registry.npm.taobao.org && node ./start.js

将该项目发布到github上,为之后的jenkins部署做前提准备

3、jenkins部分

查询jenkins镜像

 docker search jenkins 

拉取最新的jenkins镜像

docker pull jenkins:latest

启动jenkins

sudo docker run -d -u 0 --privileged --name jenkins_node1 -p 49003:8080 -v /root/jenkins_node1:/var/jenkins_home jenkins:latest

命令解析:

  • -u 0

指的是传入root账号ID,覆盖容器中内置的账号

  • -v /root/jenkins_node1:/var/jenkins_home

指的是 将docker容器内的目录/var/jenkins_home映射到宿主机 /root/jenkins_node1目录上

  • --name jenkins_node1

将容器命名为 jenkins_node1

  • -p 49003:8080

端口映射,将容器的8080端口映射到宿主机的49003端口

  • --privileged

赋予最高权限

整条命令的意思

运行一个镜像为jenkins:latest的容器,命名为jenkins_node1,使用root账号覆盖容器中的账号,赋予最高权限,将容器的 /var/jenkins_home映射到宿主机的 /root/jenkins_node1目录下,映射容器中8080端口到宿主机49003端口

查看jenkins

执行完成后,等待几十秒,等待jenkins容器启动初始化。

可以查看宿主机 /root/jenkins_node1下是否多了很多文件

到浏览器中输入 localhost:49003 查看jenkins是否启动成功

看到如下界面说明启动成功:

获取密码

cat /root/jenkins_node1/secrets/initialAdminPassword

复制输出的密码,粘贴到页面中,点击continue会进入到下面这个页面

点击安装

等待安装完成,进入到创建管理员账号界面

输入账号密码信息后点击保存(信息要填完),来到首页

配置jenkins,进入系统管理页面,管理插件

选择 ssh插件,

直接安装,等待安装完成,回到首页,

来到 系统管理 -> 系统配置

拖到最下Publish over SSH这

选择高级,输入服务器IP,用户名,密码,然后点击 Test Configuration

显示 Success 则说明配置没问题。然后保存,回到首页

新建一个项目

输入项目名称

选择源码管理,使用git管理,输入github仓库地址,添加github用户

完成来到选择构建环境,

执行的命令

sudo docker stop nodeapp || true \
 && sudo docker rm nodeapp || true \
 && cd /root/jenkins_node1/workspace/node \
 && sudo docker build --rm --no-cache=true -t node - < Dockerfile \
 && sudo docker run -d --privileged=true --name nodeapp -p 3000:3000 -v /root/jenkins_node1/workspace/node:/home/project node

保存后,点击立即构建

构建成功后,可以在宿主机的目录/root/jenkins_node1/workspace/node下看到你的项目文件了

在浏览器输入 docker服务器地址 localhost:3000 即可访问到页面信息

启动失败的,可以查看日志来确定一下失败的原因

docker logs nodeapp

4、jenkins + github自动部署

如果想本地代码提交push到github后,jenkins自动拉取最新代码重新部署,请继续看

服务器要外网能访问,本地环境想测试的可以尝试内网穿透 natapp或者 ngrok

在首页点击用户

首页 -> 用户 -> root

点击设置 -> show API Token

复制API Token 里面的值

返回到首页 -> node -> 配置 -> 构建触发器 粘贴到身份验证令牌 中

登陆到你的github项目页面 打开 Setting -> Webhooks -> Add webhooks

添加 webhooks

修改jenkins的安全策略

jenkins首页,选择 系统管理-->Configure Global Security(系统设置下面那个) 进行如下设置

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

5、docker的常用命令

对docker比较感兴趣的人可以了解一下,继续学习

镜像相关

查询镜像

docker search [name]

拉取镜像

docker pull [name]

导入镜像

docker load < /home/node.tar.gz

导出镜像

docker save > /home/node.tar.gz

查询所有镜像

docker images

删除镜像

docker rmi [name]

修改镜像名

docker tag docker.io/node node

容器相关

启动

# 运行并进入交互模式
docker run -it --name myjava java bash
# 在后台运行
docker run -d --name myjava java

端口映射

docker run -it --name myjava -p 9000:8085 -p 9000:8086 java bash

目录映射

docker run -it --name myjava -v /home/project:/soft --privileged docker.io/node bash

进入后台运行的容器

docker exec -it name bash

自动重启

docker run --restart=always -it --name myjava -p 9000:8085 -p 9000:8086 java bash

暂停容器

docker pause node

停止暂停容器

docker unpause node

停止容器

docker stop node

启动容器

docker start -i node

查看容器

docker ps -a

docker网段相关

创建网段

docker network create net1

查看网段信息

docker network inspect net1

删除网段信息

docker network rm net1

6、总结

笔者自己最近学习node,故想尝试一下通过Docker+jenkins来实现这个自动化部署的流程,自己踩了一天坑,总算是配置成功了。之前是使用pm2来管理node项目,以及使用pm2来自动化部署node项目的,有兴趣的可以去看一下。使用pm2自动化部署node项目.算是给自己做个总结笔记。写的不好的地方,望指出。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Docker下利用jenkins和docker实现持续交付

    一.什么是持续交付 让软件产品的产出过程在一个短周期内完成,以保证软件可以稳定.持续的保持在随时可以发布的状况.它的目标在于让软件的构建.测试与发布变得更快以及更频繁.这种方式可以减少软件开发的成本与时间,减少风险. 二.对比持续交付和传统交付 传统交付的发布周期可以表示为下图: 传统交付的缺点: 慢交付:在这里,客户在指定需求之后很长时间才收到产品.这导致了不满意的上市时间和客户反馈的延迟. 反馈周期长:反馈周期不仅与客户有关,还与开发人员有关.假设您意外地创建了一个bug,并在UAT阶段了解

  • ASP.NET Core+Docker+Jenkins实现持续集成的完整实例

    前言 在前后端分离开发的项目当中为了避免重复构建发布,我们需要部署一个持续发布环境,而目前的开发环境服务器都是基于 CentOS 的,因此每次在本地发布之后还需要打包,上传,部署,十分繁琐.故这里采用了比较成熟的Jenkins 作为持续部署环境. 方法如下: 1.新建一个ASP.NET Core MVC应用程序: 需要勾选Docker支持 2.将其上传到git: 3.建立Jenkins任务 (1)选择"新建任务",输入任务名称,选择"自由风格项目",然后点击确定:

  • 如何基于Jenkins构建Docker镜像

    这篇文章主要介绍了基于Jenkins构建Docker镜像,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 前提意义: SpringCloud微服务里包含多个文件夹,拉取仓库的所有代码,然后过根据选项参数使用maven编译打包指定目录的jar,然后再根据这个目录的Dockerfile文件制作Docker镜像 1. SpringCloud项目结构 注意Dockerfile文件的位置,跟src和pom.xml同级,后面会用到这个文件,若不同级,后面选择

  • Docker容器使用jenkins部署web项目(总结)

    (1)需要安装Docker容器,在Docker容器内安装jenkins,gogs,tomcat.   新建maven项目,添加findbugs plugin. 使用docker启动jenkins,gogs,Tomcat的命令gogs : 复制代码 代码如下: docker run -itd -p 10022:22 -p 10080:3000 --restart=always --privileged=true --name=gogs -v /var/gogs:/data gogs/gogs je

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

    写在前面 在前段时间尝试过用Jenkins来进行asp.net core 程序在IIS上面的自动部署.大概的流程是Jenkins从git上获取代码 最开始Jenkins是放在Ubuntu的Docker中,但是由于Powershell执行的原因,就把Jenkins搬到了windows上.因为我们网站的部署需要停掉IIS站点,所以需要Powershell来远程操作服务器(上传文件,停止站点,启动站点),也很顺利的利用WinRM+Powershell脚本实现了上面的功能,但是最后在实际使用中发现,脚本

  • jenkins构建Docker 镜像实例详解

     jenkins构建Docker 镜像实例详解 前言:jenkins有Docker镜像,而之前我们说过使用jenkins打包Docker镜像,那么可否用jenkins的Docker镜像打包Docker镜像呢? 环境: CentOS 7     Docker 1.10.3 1.本机安装docker环境,并配置TCP访问接口 # vi /usr/lib/systemd/system/docker.service 修改ExecStart为: ExecStart=/usr/bin/docker daem

  • 详解Docker下搭建Jenkins构建环境

    首先需要搭建好docker环境的linux系统,这个教程多如牛毛,在此不再赘述. 然后编写一个dockerfile来生成一个镜像,dockerfile其实就是一系列命令的集合,有点像windows的批处理文件, 搭建Jenkins构建环境需要安装jdk.maven.tomcat.jenkins,另外还安装了GIT,用来构建GIT来源的代码,内容如下: FROM centos:7 # author info MAINTAINER xulijian 514045152@qq.com # instal

  • Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的实现

    前言 Docker一直很火热,一直想把原本的Jenkins自动部署工具搬到Docker上面,无奈今年一直忙于各种事情,迟迟未实施这个事情,正好迎来了dotnet core 2.0 的正式发布,升级项目的同时,顺便直接将Jenkins搬到Docker上.为什么要写这篇文章呢?因为找过相关的资料,大多数文章都是基于Ubuntu 安装.net core 又或者 GitLab 进行持续集成 自动部署等等等,并未有人尝试过Centos7.3 上部署 Jenkins 并且 构建 ASP.NET CORE 2

  • 从零搭建docker+jenkins+node.js自动化部署环境的方法

    本次案例基于CentOS 7系统 适合有一定docker使用经验的人阅读 适合有一定linux命令使用经验的人阅读 1.docker部分 1.1.docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口 1.2.docker架构 简单的说,docker就是一个轻量级的linux系统.Docker 容器通过 Docker 镜像来创建.

  • Windows下Node.js安装及环境配置方法

    一.安装环境 1.本机系统:Windows 10 Pro(64位) 2.Node.js:v6.9.2LTS(64位) 二.安装Node.js步骤 1.下载对应你系统的Node.js版本:https://nodejs.org/en/download/ 2.选安装目录进行安装 3.环境配置 4.测试 三.前期准备 1.Node.js简介 简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境.Node

  • Gogs+Jenkins+Docker 自动化部署.NetCore的方法步骤

    环境说明 腾讯云轻量服务器, 配置 1c 2g 6mb ,系统是 ubuntu 20.14,Docker 和 Jenkins 都在这台服务器上面, 群晖218+一台,Gogs 在这台服务器上. Docker安装 卸载旧的 Docker sudo apt-get remove docker docker-engine docker.io containerd runc 更新 apt 包索引并安装包以允许 apt 通过 HTTPS 使用存储库 sudo apt-get update sudo apt

  • 基于Docker、Nginx和Jenkins实现前端自动化部署

    目录 前期准备 部署目标 Dcoker环境的搭建 连接云服务器 安装Docker环境 Docker安装Docker Compose Docker安装Nginx和Jenkins服务 安装Nginx和Jenkins Nginx和Jenkins目录编写 docker-compose.yml文件配置 nginx.conf文件配置 安装Jenkins插件 关联Jenkins和GitLab 生成密钥 新建项目 源码管理 构建触发器 结束语 前期准备 基于CentOS 7系统云服务器一台. 基于Vue-CLI

  • Linux虚拟机中node.js之开发环境搭建

    先说下nodejs这个哦,有人以为它是一种语言,其实不是,它是一个平台.下面来说下本次的话题:Vmware虚拟机node.js之开发环境搭建 一.安装linux系统 (已安装linux可跳此步骤) 虚拟机推荐选择:VirtualBox 或者 Vmware (专业版永久激活码:5A02H-AU243-TZJ49-GTC7K-3C61N) 我这里使用Vmware. 安装好Vmware后,点击新建虚拟机,选择稍后安装操作系统,然后进行配置.虚拟机设置如下: { 客户机操作系统:其他: 版本:其他64位

  • Node.js+Vue脚手架环境搭建的方法步骤

    Node.js的下载 node下载地址:https://nodejs.org/zh-cn/download/ 下载后安装即可.新版Node.js自带npm包管理器 # 查看node的版本 node -v # v12.16.1 # 查看npm版本 npm -v #6.13.4 第一个Node.js程序,新建helloworld.js文件,内容如下 console.log("Hello World") console.log("第一个Node.js程序!") 进入终端

  • 关于Jenkins + Docker + ASP.NET Core自动化部署的问题(避免踩坑)

    本来没想着要写这篇博客,但是在实操过程中,一个是被网络问题搞炸了心态(真心感觉网络能把人搞疯,别人下个包.下个镜像几秒钟搞定,我看着我的几KB小水管真是有苦说不出),另一个就是这里面坑还是有一些的,写出来也是为了让大家避免重复踩坑 几个注意点: 下方shell命令绝大部分都需要管理员权限,所以如果你使用的用户不是root,则都要加上sudo 对于较复杂的命令我都提供了注释版和无注释版,无注释版是为了让你复制起来方便 准备工作 CentOS 7.x Docker Jenkins 一份支持 dock

  • Node.js使用Express.Router的方法

    在实际开发中通常有几十甚至上百的路由,都写在 index.js 既臃肿又不好维护,这时可以使用 express.Router 实现更优雅的路由解决方案. 目录结构如下: routes的index.js代码如下: const express = require('express') const router = express.Router() router.get('/', function (req, res) { res.send('hello, express') }) module.ex

  • Node.js中的require.resolve方法使用简介

    前言 网上关于NodeJs的论述很多,此处不多说.个人认为,NodeJs的编程思想和客户端Javascript保持了一种理念,没有什么变化,只是增加了"require()"函数,因此只要学好require函数,剩下的问题就是如何更好的使用API了.本文则主要介绍了Node.js中的require.resolve方法,下面来看看详细介绍吧. 简单的说,在 Node.js 中使用 fs 读取文件的时候,经常碰到要拼一个文件的绝对路径的问题 (fs 处理相对路径均以进程执行目录为准). 之前

  • Node.js中流(stream)的使用方法示例

    前言 本文主要给大家介绍了关于Node.js 流(stream)的使用方法,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍: 流是基于事件的API,用于管理和处理数据,而且有不错的效率.借助事件和非阻塞I/O库,流模块允许在其可用的时候动态处理,在其不需要的时候释放掉. 使用流的好处 举一个读取文件的例子: 使用fs.readFileSync同步读取一个文件,程序会被阻塞,所有的数据都会被读取到内存中. 换用fs.readFile读取文件,程序不会被阻塞,但是所有的数据依旧会被一次性

随机推荐