
本文介绍 使用 jenkins部署机来部署项目到 远程服务器
为什么我要把jenkins装在单独的一台服务器, 一是为了降低部署和生产环境的耦合性, 二是为了节约成本, 可以再本地服务器搭建部署机
1. 安装jenkins
我使用的是docker安装的方式, 安装步骤:https://jenkins.io/zh/doc/book/installing/#docker
2. 配置jenkins镜像的ssh密钥
此处假设你已经成功登录进入了jenkins, 可以看到下图界面

好, 现在我们进入镜像系统命令行中, 生成ssh密钥
- 查看当前运行镜像的id
$ docker ps

- 进入镜像命令行
docker exec -it 你的镜像ID /bin/bash

可以看到, 进入了镜像的bash
- 生成SSH密钥
这里说明一下为什么配置ssh, 这样可以更好的免密使用git 和 免密码登录远程服务器
$ cd /root/.ssh
$ ssh-keygen -t rsa -C 你邮箱
$ cat id_rsa.pub
最后一个命令后, 可以看到这串密钥

随后我们分别去github和需要远程连接的服务器的服务商(比如良心云, 套路云)那配置ssh, 这玩意我就不多说了.我是一条酸菜鱼
3.配置jenkins的github hook
- 进入主界面的
系统管理
image.png
-
进入系统设置
image.png
- 往下拉, 可以看到github的配置区, 这里github插件是前期初始化的时候自动安装的, 没有的可以区插件中安装GitHub plugin
image.png
点击凭据后的Add
按钮, 添加凭据, 就是账号密码, 搞好后点击连接测试, 成功即可
image.png
连接成功
- 随后点击下面的
Advance
image.png
选中即可生成hook
image.png
-
到github的项目下配置hook
image.png
image.png
image.png
4.新建一个任务



构建触发器选择hook触发

构建方式选择
shell

填入shell保存即可

5. 现在具体分析一下shell
#!/bin/sh
ssh -tt 远程服务器用户名@远程服务器ip << remotessh
cd /home/tlgc_server_api
/bin/git pull
npm run stop
npm run start
exit
remotessh
- 第一句, 说明这是个shell脚本
- 第二句, 防止报错
Pseudo-terminal will not be allocated because stdin is not a terminal.
所以给ssh
加上-tt
参数, 为了可以在远程机器上执行命令, 需要<< remotessh
, 这里注意, 最后两句, 用来退出远程机器, 不然的话, 会导致任务无法终治. - 第四句, 这里需要使用
git
的完整路径, 之前写cron
的时候也遇到过, 执行bash
, 需要使用/bin/bash
, 这里执行git
命令, 也需要完整路径/bin/git
, 昨晚我就用git
, 然后也没加最后两句终治, 任务就一直卡在那,卡一晚上...
6. 最后可以测试一下, 完美

7. 总结一下
感觉还行, 虽然没用到jenkins其他好功能, 但是适合自己的就是最好的
目前体验过的自动化部署有
- github + docker + dockerhub
- github + docker + daocloud
- github + jenkins + ssh
- gitlab runner
以前觉得daocloud方便, 现在目前开发用的是jenkins, 看个人口味了
网友评论