注:默认前提是你已经在服务器上用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
(上面的插件提供的),进行如下设置:
- 找到
Publish over SSH
,设置:
那些都不需要设置,直接用我们的容器的私钥就好了,如何获取私钥:
(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
字段:
(1) name
: ssh节点名称,建议协商服务器的概要,不要设置成你项目的名字,因为jenkins不可能只服务你一个项目,肯定有很多项目
(2) hostname
: 远程服务器IP
(3) username
登录服务器时使用的用户名
(4) remote directory
推送到远程服务器的目录,建议根目录,在job任务里在仔细的填写ssh的具体目录
#3.配置安装nodejs
环境(系统管理-全局工具配置-nodejs)
- 勾选自动安装
- 选择一个node版本即可
#4.github
授权
- 打开你的
github
服务器地址,(setting
-Developer settings
-Personal access tokens
-Generate new token
), 勾选repo
admin:repo_hook
两项生成token
并且复制备用 - 打开
jenkins
(系统管理-系统设置-github
), 添加github
服务器,名称随便填,URL默认。
这里要注意凭据的添加,点击添加:
类型选择secret text
,secret
字段填刚才github
那里生成的token, 点添加(如果这里添加了但是并没有在刚才凭据的下拉里看到的话,也就是没添加成功,原因我不清楚,可以在jenkins
根目录菜单选择凭据然后在右侧按照上面的方法添加如果还不行就直接使用ip地址加端口访问jenkins
来添加这个凭据这个东西。) -
选择刚才添加的凭据,点连接测试是否成功:
- 设置
github
的Hook
地址,点击下面的高级,会出现地址并复制:
- 去
github
上找到你的项目进入详情(setting
-webhooks
-add webhooks
)
在Payload URL
填写刚刚jenkins
生成的hook
地址即可。
#5. 新建一个jenkins
任务job进行部署配置
-
新建任务
-
配置该Job任务
(1)general
: 填写下图几项,项目URL
就是你要构建的那个项目的github url
地址;
(2)源码管理:
- 选择
git
- 填入项目地址
-
Credentials
这里的凭据还是跟刚才那样添加,如果不起效果那么选择username with password
类型添加,就是你github
的账号和密码 -
Branch specifier
选择你想要构建的分支,因为一个项目有很多分支,比如dev
,test
,prd
等,直接写*/你项目分支名
(3) 构建触发器: 选择GitHub hook trigger for GITScm polling
即可
(4) 构建环境: 选择 Provide Node & npm bin/ folder to PATH
, 在选一个你安装好的Nodejs
(前提你在之前通过jenkins
全局设置安装好了node)
(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
来把我们构建好的代码包推送到远程服务器上并解压
-
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
后成功