jenkins远程部署项目
image.png
本文介绍 使用 jenkins部署机来部署项目到 远程服务器 为什么我要把jenkins装在单独的一台服务器, 一是为了降低部署和生产环境的耦合性, 二是为了节约成本, 可以再本地服务器搭建部署机
1. 安装jenkins
我使用的是docker安装的方式, 安装步骤:https://jenkins.io/zh/doc/book/installing/#docker
2. 配置jenkins镜像的ssh密钥
此处假设你已经成功登录进入了jenkins, 可以看到下图界面
jenkins
好, 现在我们进入镜像系统命令行中, 生成ssh密钥
- 查看当前运行镜像的id
$ docker ps
docker ps
- 进入镜像命令行
docker exec -it 你的镜像ID /bin/bash
bash
可以看到, 进入了镜像的bash
- 生成SSH密钥
这里说明一下为什么配置ssh, 这样可以更好的免密使用git 和 免密码登录远程服务器
$ cd /root/.ssh
$ ssh-keygen -t rsa -C 你邮箱
$ cat id_rsa.pub
最后一个命令后, 可以看到这串密钥
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.新建一个任务
image.png
image.png
image.png
构建触发器选择hook触发
image.png
构建方式选择shell
image.png
填入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. 最后可以测试一下, 完美
image.png
7. 总结一下
感觉还行, 虽然没用到jenkins其他好功能, 但是适合自己的就是最好的 目前体验过的自动化部署有
- github + docker + dockerhub
- github + docker + daocloud
- github + jenkins + ssh
- gitlab runner
以前觉得daocloud方便, 现在目前开发用的是jenkins, 看个人口味了
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法