前言

每次项目代码更新后都要重新部署,如果只有一台服务器还好.

但是如果是分布式系统,动不动就很多台服务器,所以代码的自动部署就显得十分重要了.

这里用几篇文章来记录一下如何使用Jenkins,Docker,github来搭建一个自动化部署的node项目.

思路

  1. 使用git进行版本控制,当项目更新时就触发 Jenkins的构建任务
  2. Jenkins 从 git 拉取最新的代码
  3. 为了避免多个节点的运行环境差异,所以需要使用 Docker 来将我们的 node 项目打包为镜像
  4. 将镜像通过脚本部署到所有的子节点上

安装Docker

本人使用的阿里云的服务器,操作系统Centos7

yum install docker

安装docker

docker 安装完成后需要启动docker服务

service docker start

docker启动完成后,下一步就需要启动docker容器

ps -ef|grep docker

Docker上安装Jenkins

docker 安装好后下一步就是安装 Jenkins 镜像

在安装前需要创建一个目录用于映射 Jenkins 的镜像中的文件,以便安装好 Jenkins 后查看初始密码等操作

创建目录

mkdir /var/jenkins_home

然后修改该目录的权限,不然很可能在 Jenkins 镜像映射文件时没有操作权限,导致镜像启动秒退

chown -R 1000:1000 /var/jenkins_home

然后我们就可以拉取 Jenkins 镜像了

docker pull jenkins/jenkins:lts

然后我们可以通过以下命令来查看已经存在的镜像

docker images

接下来就是启动 Jenkins 容器了

命令如下:

docker run -d --name myjenkins -p 9000:8080 -v /var/jenkins_home:/var/jenkins_home jenkins/jenkins:lts

该命令的含义大致如下:

  • 在后台运行一个基于jenkins:latest镜像的容器, 容器的名字叫做 jenkins_node ,把容器的8080端口映射为服务器的 9000 端口(因为Jenkins的默认端口为8080),并且把服务器上的/var/jenkins_home目录挂在到docker容器上的/var/jenkins_home目录
  • -d 后台运行docker容器
  • --name 为容器起个别名
  • -p docker容器端口映射
  • -v 文件挂载

如果出现

这样的报错信息,并且容器已经成功创建的情况下,说明可能是centos系统版本兼容性问题

使用下方代码后再运行即可解决:

yum update

那么怎么判断是否成功呢?

使用以下代码可以查看docker已经创建的容器:

docker ps -a

如上图所示,我们jenkins已经创建并运行了 3 分钟了

然后我们再去看看之前创建用于挂载文件的文件夹

发现其中已经存在了许多 Jenkins 的文件,那么我们就可以开始使用Jenkins了

访问: 你的服务器IP加上映射的端口就行了

Jenkins配置

首先我们需要找到 Jenkins 的初始化密码

所以如果之前我们没有将Jenkins的目录挂载到容器外,那么我们还需要进入容器进行查找

现在我们就只需要到你的服务器上刚才映射的目录去找就行了

然后将其中的内容输入输入框

接下来你会看到下面的页面

这里是让你选择安装的插件,如果是没有特殊需求,直接选择左边的安装建议的插件即可

如下图所示

这里插件没有安装成功的不用太在意,如果有强迫症的话可以重新安装插件即可

如果失败很多次,那么就需要将Jenkins的插件镜像站换成国内的镜像站

先点击 Continue

然后创建账号

完成后我们就先把刚才插件的问题解决一下

在系统设置的插件管理中

点击进入后选择高级选项

将升级站点的url替换为

http://mirror.esuni.jp/jenkins/updates/update-center.json

保存后重新安装即可

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

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

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

  2. node项目自动化部署--基于Jenkins,Docker,Github(3)自动化部署

    GitHub仓库 由于现在的代码基本上都是多人合作开发,所以肯定会用到像 git 这样的版本控制工具 所以这里使用 GitHub 来做一个演示 首先我们需要在github上新建一个仓库 点击New来新 ...

  3. docker jenkins 前端node项目 自动化部署异常 env: ‘node’: No such file or directory

    出现问题是docker jenkins 里面没有自动安装node导致找不到这个Node命令 解决方案:手动安装nodejs # 进入jenkins对应容器中 # docker exec -it [对应 ...

  4. .Net Core 自动化部署:使用docker版jenkins部署dotnetcore应用

    安装docker版jenkins 因为jenkins的docker版本本身没有 dotnetcore的环境,所以我们需要先自己动手制作下包含dotnet环境的jenkins Docker Contai ...

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

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

  6. jenkins+windows+springboot+.net项目自动化部署图文教程

    之前一直在linux中使用jenkins部署程序,正好现在的项目包括了winfrom程序,所以需要部署到windows系统中 jenkins官网:https://jenkins.io/ 下载之后运行j ...

  7. jenkins实现maven项目自动化部署tomcat

    最近公司有用到jenkins实现自动化部署,这里我对新的东西也是比较感兴趣,就用了点时间尝试了一下,虽然网上有很多这种例子,但是可能有些细节我也走了一些弯路.在这里记录一下,方便下次用到. 实现环境: ...

  8. Jenkins持续集成实践之java项目自动化部署

    关于Linux安装Jenkins可以参考我的这篇博文Ubuntu16.04环境安装jenkins 1.安装部署插件 进入插件管理,并搜索该插件Deploy to container Plugin进行安 ...

  9. gitlab+jenkins+pm2+rsync实现node的自动化部署

    环境配置 jenkins java环境 yum install -y java 安装jenkins wget -O /etc/yum.repos.d/jenkins.repo http://pkg.j ...

随机推荐

  1. [ Java面试题 ]持久层篇

    1.什么是ORM?  对象关系映射(Object-Relational Mapping,简称ORM)是一种为了解决程序的面向对象模型与数据库的关系模型互不匹配问题的技术: 简单的说,ORM是通过使用描 ...

  2. Load balancer does not have available server for client

    最近在研究spring-cloud,研究zuul组件时发生下列错误: Caused by: com.netflix.client.ClientException: Load balancer does ...

  3. Spring Security-- 验证码功能的实现

    spring security4 添加验证码 http://www.itwendao.com/article/detail/165400.html http://www.itdadao.com/art ...

  4. 部署:持续集成(CI)与持续交付(CD)——《微服务设计》读书笔记

        系列文章目录:     <微服务设计>读书笔记大纲 一.CI(Continuous Integration)简介  CI规则1:尽量频繁地把代码签入到分支中以进行集成 CI规则2: ...

  5. 如何开始使用 Java 机器学习

    开始Java机器学习的最好工具是什么? 这个问题已经有一段时间了,但最近这些日子几乎每个人都在谈论人工智能和机器学习.这已经不再是一个保留给科学家和研究者的秘密,而是几乎实现于每一项新兴技术中. 在下 ...

  6. 将sqlserver导出的csv数据导入到ubuntu和mac上的mysql

    最近在捣鼓一些数据相关的东西.将sql server里的数据导入到ubuntu和mac上的mysql,方法有很多.不过我选择了最简单的一种:将sql server的数据导成csv,然后将csv导入到m ...

  7. 『网络の转载』关于初学者上传文件到github的方法

    说来也惭愧,我是最近开始用github,小白一个,昨天研究了一个下午.终于可以上传了,所以今天写点,一来分享是自己的一些经验,二来也是做个记录,万一哪天又不记得了:) 废话不多说,直接来,这次主要介绍 ...

  8. 读取一个txt文档中的内容

    包含的头文件:#include <fstream> bool CMaked::ReadFileMake(CString filePath, CString &isChange) { ...

  9. BZOJ_1026_[SCOI2009]windy数_数位DP

    BZOJ_1026_[SCOI2009]windy数_数位DP 题意:windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道, 在A和B之 ...

  10. layer的删除询问框的使用

    删除是个很需要谨慎的操作 我们需要进行确认 对了删除一般使用ajax操作 因为如果同url请求 处理 再返回 会有空白页 1.js自带的样式 <button type="button& ...