– 前语

作为一名前端工程师,除了页面开发,在资格达到一定程度时,对后端技术以及运维CI/CD的掌握,都是必不可少的一环。传统的方法,首先把项目开发好,经过git指令把代码推送到github或其他代码办理平台,再把本地项目打包好,放在服务器相应目录下并履行发动指令。 很明显这样的方法现已不符合当代便捷的思维,所以各种主动化东西就顺势而生了。

本篇文章首要介绍运用运用Docker装置+布置Jenkins,在Jenkins构建一个自由风格的任务,布置一个node服务并相关github项目,从而完结开发阶段推送代码后,服务端能主动拉取代码并重启的功用,整个进程,只需操作一次同步推送,非常简单粗犷。

传统流程

graph TD
代码同步 --> 打包 --> 放到服务器 --> 发动项目

1. Docker 装置 Jenkins

有两种常规的装置方法,都需求先创立映射文件夹,然后在容器中对文件的增删改查都可以经过映射的文件去完结,而不必一向依靠Linux的指令,可节约大量的操作成本。 需求留心Jenkins镜像请挑选最新最多人运用的经典版本:jenkins/jenkins

创立映射文件夹

途径依据项目要求调整

mkdir /usr/local/jenkins_home

运用命令行装置Jenkins

docker run \
  -u root \
  -d \
    -p 8888:8080 \
    -p 50000:50000 \
    -v /usr/local/jenkins_home:/var/jenkins_home \
    --restart=always \
    --name=jenkins \
    jenkins/jenkins

运用docker-compose的方法

这种方法类似装备文件,在/usr/local/jenkins_home创立了docker-compose.yml文件,以下是文本内容:

version: '3'                                    # 指定 docker-compose.yml 文件的写法格局
services:                                       # 多个容器集合
  docker_jenkins: 
    user: root                                  # 为了避免一些权限问题 在这我运用了root
    restart: always                             # 重启方法
    image: jenkins/jenkins                      # 指定服务所运用的镜像 在这里我挑选了 LTS (长时间支持)
    container_name: jenkins              # 容器名称
    ports:                                      # 对外露出的端口界说
      - '8888:8080'
      - '50000:50000'
    volumes:                                    # 卷挂载途径
      - /usr/local/jenkins_home/:/var/jenkins_home   # 这是咱们一开始创立的目录挂载到容器内的jenkins_home目录
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/bin/docker:/usr/bin/docker                 # 这是为了咱们可以在容器内运用docker命令

先进入jenkins_home目录:

cd /usr/local/jenkins_home

履行docker-compose.yml:

docker-compose up -d

履行之前需装置docker-compose,可参考链接blog.csdn.net/weixin_4612…

查看装置是否成功

输入指令 docker ps,发现现已多了jenkins这个容器 用浏览器输入 http://ip地址/:8888进入jenkins的登录注册画面

使用Docker + Jenkins,用freeStyle CI/CD的方式实现node + github 的自动化部署

初始密码在容器的/var/jenkins_home/secrets/initialAdminPassword 或许映射文件下的/usr/local/jenkins_second/secrets/initialAdminPassword中

装备Jenkins

挑选装置引荐的插件,然后等待插件主动下载完结

使用Docker + Jenkins,用freeStyle CI/CD的方式实现node + github 的自动化部署

使用Docker + Jenkins,用freeStyle CI/CD的方式实现node + github 的自动化部署

输入第一个办理员账号密码,在实例装备中直接保存,这样Jenkins就算装备成功了。点击完结后,主动跳转到Jenkins的首页。

使用Docker + Jenkins,用freeStyle CI/CD的方式实现node + github 的自动化部署

2.装置及装备相关插件

要完结完结的功用,还需求装置Node.js, Publish Over SSHGitHub Api三个插件

装置 Node.js

点击系统办理-插件办理,点击Available Value输入node,点击装置后重启。

使用Docker + Jenkins,用freeStyle CI/CD的方式实现node + github 的自动化部署

装备 Node.js

点击Manage Jenkins 系统办理,进入大局东西装备,在最下方会见到NodeJS,装备如图

使用Docker + Jenkins,用freeStyle CI/CD的方式实现node + github 的自动化部署

装置Publish Over SSH

进程跟上述类似,挑选装置后重启

使用Docker + Jenkins,用freeStyle CI/CD的方式实现node + github 的自动化部署

装备Publish Over SSH

在系统办理的系统装备,最下方找到Publish Over SSH这个选项卡,装备完结,点击右下方的Test Configuration`,显示 Success.

使用Docker + Jenkins,用freeStyle CI/CD的方式实现node + github 的自动化部署

装置 GitHub Api插件

进程跟上述共同,留意在装置引荐插件的进程中可能现已装置过这插件

装备 GitHub Api插件

在装备之前,咱们先要到 GitHub 生成 Personal access token,作为密钥衔接Github跟服务器

咱们点击右上角头像 – Settings,找到Developer settings,然后选中Personal access tokens的classic,点击右上角Generate new token,按图中所示勾选对应的内容。

点击Generate token后会生成一个toke, 必须留意token只会呈现一次,生成后我就马上用文档粘贴进去了。

使用Docker + Jenkins,用freeStyle CI/CD的方式实现node + github 的自动化部署

进入系统办理-系统装备里面,找到GitHub,点击增加服务器。 在凭证下面点击增加,在弹出窗口的类型挑选Secret text,并把刚生产的token粘贴到Secret中 点击保存,在本来的页面的凭证里挑选Secret Text.

使用Docker + Jenkins,用freeStyle CI/CD的方式实现node + github 的自动化部署

使用Docker + Jenkins,用freeStyle CI/CD的方式实现node + github 的自动化部署

最终在下方选中办理Hook,并点击衔接测验,如果能呈现github的账户名,证明衔接已成功

使用Docker + Jenkins,用freeStyle CI/CD的方式实现node + github 的自动化部署

3. 运用Jenkins 构建一个自由风格的项目

点击新建任务,输入任务名称,挑选构建一个自由风格的软件项目

使用Docker + Jenkins,用freeStyle CI/CD的方式实现node + github 的自动化部署

勾选Github项目,在项目URL下输入github项目的浏览器地址。

使用Docker + Jenkins,用freeStyle CI/CD的方式实现node + github 的自动化部署

源码办理下挑选Git,在Repository URL里输入项目的github地址,即是git clone对应的地址。指定分支改为项目对应的分支。

使用Docker + Jenkins,用freeStyle CI/CD的方式实现node + github 的自动化部署

持续往下勾选 构建触发器 一栏中的 GitHub hook trigger for GITScm polling,勾选 构建环境 一栏中的 Use secret text(s) or file(s) ,在 凭证 一栏中选中咱们之前增加的 Secret text,勾选 Provide Node & npm bin/ folder to PATH 为构建项目供给 Node.js 环境。

使用Docker + Jenkins,用freeStyle CI/CD的方式实现node + github 的自动化部署

使用Docker + Jenkins,用freeStyle CI/CD的方式实现node + github 的自动化部署

GitHub hook trigger for GITScm polling 这一个选项,意味着每次Github 触发了Hook之后,该Jenkins项目就会当即进行构建。可在github项目的Setting => WebHooks中查看到,仅仅是push事情会触发hook,也可点击下方的Let me select individual events挑选其他触发时机。

使用Docker + Jenkins,用freeStyle CI/CD的方式实现node + github 的自动化部署

接下来在构建进程(Build Steps) 中,增加构建进程,挑选履行sheel。在构建的进程会履行这些指令发动node服务。 这次直接在项目目录下发动进程,关于布置还有一种更为安全谨慎的先打包后发动的方法,会在另外一篇文章叙说。

使用Docker + Jenkins,用freeStyle CI/CD的方式实现node + github 的自动化部署
最终在构建后的进程勾选Send build artifacts over SSH,运用ssh的方法把代码从github上传到服务器,点击保存,装备完结。

  • Source files: 生产打包后文件的途径
  • Remove prefix: 移除打包前的途径
  • Remote directory: 长途服务器途径
  • Exec command: 发动指令,发动包,如是前端项目此处可不填

因为这次直接在根目录发动,这些关于打包后处理的信息可以不填

使用Docker + Jenkins,用freeStyle CI/CD的方式实现node + github 的自动化部署

4. 当即构建

点击当即构建按钮,左下方的Build History会呈现一条正在履行的记载。点击进去查看控制台输出,能看出来项目现已发动,而且进程持续进行中,如此一来,本次布置就现已正式完结。

使用Docker + Jenkins,用freeStyle CI/CD的方式实现node + github 的自动化部署

使用Docker + Jenkins,用freeStyle CI/CD的方式实现node + github 的自动化部署

5 其他问题

webHook 检验

从本地项目尝试一次git push, Build History会呈现一条正在履行的记载,阐明webHook能正常发挥作用。

docker 装置 Jenkins问题

在装置完Jenkins后,翻开的时候可能访问无呼应,可先用netstat -ntlp查看端口是否敞开或许是否被其他进程占用,还有便是查看云服务的安全组是否敞开此端口。

使用Docker + Jenkins,用freeStyle CI/CD的方式实现node + github 的自动化部署