注:默认前提是你已经在服务器上用docker装好了jenkins容器并启动。
#1.安装插件(系统设置-插件管理-可选插件)
-
Build Timestamp Plugin(构建时间戳) -
Publish Over SSH(ssh服务,把构建好的文件ssh到相应服务器) -
GitHub plugin(有可能默认已经安装了,负责触发hook) -
GitHub API plugin(有可能默认已经安装了,负责触发hook) -
nodejs plugin(nodejs服务)
!!全部装完建议重启jenkins服务,我的重启后变成中文版的了- -, 在服务器上docker restart jenkins;
#2.配置相应的插件(系统管理-系统设置)
- 找到
Build Timestamp(上面的插件提供的),进行如下设置:
1.png - 找到
Publish over SSH,设置:
2.png
那些都不需要设置,直接用我们的容器的私钥就好了,如何获取私钥:
(1)docker exec -it jenkins sh进入容器
(2)ssh-keygen -m PEM -t rsa -b 4096生成ssh私钥及公钥(默认在 ~/.ssh 即 /root/.ssh 目录中),可以一路回车,若设密码的话,需在“Passphrase”中填写
(3)cat ~/.ssh/id_rsa查看私钥,把私钥copy到上图的“key”设置中
(4)cat ~/.ssh/id_rsa.pub查看公钥,把公钥copy到宿主机服务器的~/.ssh/authorized_keys中, 这样服务器就能接受jenkins容器的ssh推送了。
然后继续配置SSH Servers字段:
4.png
(1) name: ssh节点名称,建议协商服务器的概要,不要设置成你项目的名字,因为jenkins不可能只服务你一个项目,肯定有很多项目
(2) hostname: 远程服务器IP
(3) username 登录服务器时使用的用户名
(4) remote directory 推送到远程服务器的目录,建议根目录,在job任务里在仔细的填写ssh的具体目录
#3.配置安装nodejs环境(系统管理-全局工具配置-nodejs)

5.png
- 勾选自动安装
- 选择一个node版本即可
#4.github授权
- 打开你的
github服务器地址,(setting-Developer settings-Personal access tokens-Generate new token), 勾选repoadmin:repo_hook两项生成token并且复制备用 - 打开
jenkins(系统管理-系统设置-github), 添加github服务器,名称随便填,URL默认。
6.png
这里要注意凭据的添加,点击添加:
7.png
类型选择secret text,secret字段填刚才github那里生成的token, 点添加(如果这里添加了但是并没有在刚才凭据的下拉里看到的话,也就是没添加成功,原因我不清楚,可以在jenkins根目录菜单选择凭据然后在右侧按照上面的方法添加如果还不行就直接使用ip地址加端口访问jenkins来添加这个凭据这个东西。) -
选择刚才添加的凭据,点连接测试是否成功:
8.png - 设置
github的Hook地址,点击下面的高级,会出现地址并复制:
9.png - 去
github上找到你的项目进入详情(setting-webhooks-add webhooks)
10.png
在Payload URL填写刚刚jenkins生成的hook地址即可。
#5. 新建一个jenkins任务job进行部署配置
-
新建任务
11.png -
配置该Job任务
(1)general: 填写下图几项,项目URL就是你要构建的那个项目的github url地址;
12.png
(2)源码管理:
- 选择
git - 填入项目地址
-
Credentials这里的凭据还是跟刚才那样添加,如果不起效果那么选择username with password类型添加,就是你github的账号和密码 -
Branch specifier选择你想要构建的分支,因为一个项目有很多分支,比如dev,test,prd等,直接写*/你项目分支名
13.png
(3) 构建触发器: 选择GitHub hook trigger for GITScm polling即可

14.png
(4) 构建环境: 选择 Provide Node & npm bin/ folder to PATH, 在选一个你安装好的Nodejs(前提你在之前通过jenkins全局设置安装好了node)

15.png
(5) 构建: 选择添加构建步骤,执行 shell
#!/bin/bash
echo '开始项目构建命令'
echo $PATH
node -v
npm -v
echo '当前分支'
git branch
echo '拉代码'
git pull origin spa
echo '装node_modules'
npm install
echo '打包'
npm run build
echo '压缩/dist'
tar -cvf dist.tar ./dist
(6) 构建后操作:选择 增加构建后操作, send build artifacts over ssh 来把我们构建好的代码包推送到远程服务器上并解压

17.png
-
name填你想要填的 -
source files想要操作的文件 这里的dist.tar就是上面构建后打包的压缩文件 -
Remote directory推送到远程目录,因为我们在全局的jenkins配置上已经配置过ssh server的基础目录是/目录了,所以在这就填写具体的你想要放置的目录(建议这个目录是nginx绑定的主页目录,这样一推送nginx就会自动映射了) -
Exec command推送完毕后你想要执行的命令
#6. 本地代码推送部署
- 本地相应分支代码推送到
github,应该就会部署构建了,可以查看控制台输出日志 - 我遇到了
env: ‘node’: No such file or directory问题,是因为jenkins容器并没有成功安装node或环境变量没有node,无果google:
(1)docker exec -it jenkins sh进入容器
(2)apk add --no-cache nodejs手动安装node后成功
18.png











