Docker+Jenkins 自动化部署nodeJS项目

Jenkins基本配置:
1、运行Jenkins的服务器(暂且叫作:Jenkins服务器)
2、Git仓库服务器(人家GitHub的)
3、Node项目运行服务器(暂且叫作:Node服务器)
共两台服务器。

基本工作流程:
1、Jenkins从Git上把代码拉取到Jenkins服务器,并进行各种操作(如:npm i;npm build;打包等)。
2、Jenkis把处理好的代码包发送到Node服务器,并在Node服务器上执行你在Jenkins中预先设定好的命令(解压、pm2 start XXX等)。

*添加DaoCloud的加速器

由于国内网的问题,可先添加DaoCloud的加速器:
在DaoCloud官网上找到 加速器 选项,找到你对应的操作系统

$ curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://dfe09f6e.m.daocloud.io

一、拉取 Jenkins

$ sudo docker pull jenkins:2.19.2    ##可以自行去 docker hub上找相应的版本

二、创建本地Jenkins配置文件目录

$ sudo mkdir /var/jenkins_home
$ sudo chmod 777 /var/jenkins_home   ##注意这里必须配置本地卷的权限,否则启动失败

三、运行jenkins镜像

$ sudo docker run -d -p 9000:8080 -v /var/jenkins_home:/var/jenkins_home --name myjenkins jenkins:2.32.1

我们将Jenkins默认的8080端口映射到9000,然后本地访问Jenkins。
因为我是用Xshell连接的 虚拟机,否则直接用 localhost即可。

登录Jenkins

本地 /var/jenkins_home 目录下会出现相应文件

本地卷中相应文件

根据网页的提示我们找到

 $ cat /var/jenkins_home/secrets/initialAdminPassword
  #  8a58fdbae4184635a97a67175a7ebc21    这就是上面让你输入的密码

四、安装插件

1、安装插件

此图是借来的

插件下载中...

此图也是借来的

2、创建用户

此图还是借来的

3、安装 publish over ssh 插件

此图借来的
借来的
借来的
借来的

五、系统设置

1、填 Key

借来的

拉到最下面,找到 'Publish over ssh'

Paste_Image.png

在Key 处填上你服务器的SSH秘钥。
注意:需要把:
'-----BEGIN RSA PRIVATE KEY-----' 和'-----END RSA PRIVATE KEY-----'
都带上,否则会报:无效的私钥。
秘玥生成方式:

$ ssh-keygen
秘钥生成

打箭头的地方可以不输入,第一个箭头是让你输入秘玥保存地址的,如果不输入,默认保存在红线框中那个位置,找到该位置

$ cat /home/wxq/.ssh/id_rsa
生成的秘玥

2、增加新的 SSH Servers

1)、点 ‘增加’
添加 SSH Servers
2)、填服务器相关信息
填服务器相关信息

Name :是Jenkins通过SSH连接远程服务器时展示的名字,随便起
Hostname:服务器IP
Username: 服务器登录用户
Remote Directory:登录到服务器以后的路径

继续点击 '高级',勾选 " Use password authentication, or use a different key"

高级配置

Passphrase / Password :填上你的 服务器登录账户的对应密码
Port : SSH开放的端口
Timeout(ms):超时时间,建议设置长一点
然后点击 "Test Configuration",显示 Success表示连接成功。

点击 "保存",开始创建新项目。

六、项目创建

1、创建项目

构建自由风格软件

2、项目信息+github信息

填上 "项目名称" +"描述",点击 "源码管理"


项目信息+github信息

3、填写Git信息

1)、Repository URL 填写你的项目拉取地址,也就是:git clone 后面的那个地址。

2)、点击"Add" --"Jenkins"


填写Git信息

3)、添加git账户信息

添加Git账户信息

4、构建

我现在的操作是:现将代码拉取到本地,然后在本地进行归档,然后通过Jenkins远程推送到服务器上,然后在服务器上运行代码。主要原因是我们的远程服务器不能从Git上拉取代码。如果你们的服务器可以拉取代码,可以不添加这个,直接添加 "Send files or execute commands over SSH"

1)、先添加Jenkins本地脚本

本地执行的某些命令

添加以后如下图:

Paste_Image.png

在Command中添加我们的执行脚本,
注意:
1、Jenkins自动构建的时候,会自动从我们配置的Git上拉取代码,所以不需要手动写。
2、Jenkins的工作目录是:/var/jenkins_home/workspace/jenkins-nodejst01,
====:jenkins-nodejst01:是我创建项目时起的名字,工作目录我们可以通过在 Command中敲入: pwd来验证。
开始敲入相应命令

pwd    #打印出Jenkins的工作目录
# 对/var/jenkins_home/workspace/docker-jenkins-nodejs-01目录下
#除了.git和*.gz以外的文件进行归档,并归档到  /tmp目录下
#命名为:docker-jenkins-nodejs.tar.gz
tar -zcvf /tmp/docker-jenkins-nodejs.tar.gz -C /var/jenkins_home/workspace/docker-jenkins-nodejs-01 . --exclude=".git" --exclude="*.gz"    
#然后将归档文件移动至 Jenkins的工作目录下,为了下面向服务器传输做准备
mv /tmp/docker-jenkins-nodejs.tar.gz /var/jenkins_home/workspace/docker-jenkins-nodejs-01

2)、再添加向远程服务器推送代码并执行相应命令的脚本

添加向远程服务器推送代码并执行脚本
Paste_Image.png

1、Source files:就是刚才压缩出来的文件,默认的路径就是Jenkins的工作空间,也就是 "pwd"打印出来的那个路径,如果需要在那个路径的基础上添加新路径的话可以这样:newDir/docker-jenkins-nodejs.tar.gz,然后在Remove prefix中填上 newDir
2、Remove prefix:如上所述
3、Remote directory:远程服务器接受文件的地址,默认是我们配置SSH的时候配置的 /,所以在此基础上继续添加即可。
4、Exec command:在远程服务器上执行的命令,这个看你自己的需求了。

最后点击"保存"即可

七、自动部署

以上的是非自动部署,须有手动点击 立即构建才行,下面是自动部署

jenkins --> 首页 --> 用户


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


复制API Token内容


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


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


URL 中 node 请替换为你在jenkins上创建的项目名称
token为复制的 API Token内容,如图:
在此路径基础上加上:build?token=你刚才生成的那个token

Paste_Image.png

此时你git push,会发现jenkins并没有自动构建,是因为jenkins的安全策略导致的,还需要如下设置jenkins首页,选择 系统管理-->Configure Global Security(系统设置下面那个) 进行如下设置

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

本篇参考:
http://www.jianshu.com/p/052a2401595a
在此基础上补充了本人在调试时遇到的部分比较幼稚的问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容