本地搭建 docker + jenkins
部署系统, 经过 github
的 webhook
实现代码自动化部署.node
docker
mac: docs.docker.com/docker-for-…
windows: docs.docker.com/docker-for-…
liunx:git
// 推荐脚本安装方式
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
复制代码
控制台输入 docker -v
, 显示版本则安装成功github
Docker version 20.10.5, build xxxxx
复制代码
jenkins
控制台输入docker search jenkins
,选择安装jenkinsci/blueocean
镜像,比较稳定.web
控制台输入
docker pull jenkinsci/blueocean
,下载完成以后输入docker images
看到以下信息即安装成功
docker
jenkins
控制台输入docker run -d --name docker-jenkins -p 8008:8080 -p 50000:50000 jenkinsci/blueocean
启动容器,启动成功会返回该容器 idshell
浏览器打开本地 8008 端口,正常状况下会出现解锁
jenkins
页面npm
下一步须要进入容器内拿到密码,以我刚刚启动的容器为例,控制台输入docker exec -it docker-jenkins bash
进入容易内,而后输入cat /var/jenkins_home/secrets/initialAdminPassword
json
输入控制台返回的密码进入配置页面,这里选择安装推荐的插件,可能会有安装失败的插件,重试便可windows
插件安装完成后,输入信息建立用户浏览器
实例配置不变继续点击下一步,此时须要重启动,重启完成登陆刚刚建立的用户便可,接下来进行配置环节
下面对 github 以及 jenkins 进行配置
进入docker-jenkins
容器内,输入ssh-keygen -t rsa -C test@test.com
,连续回车生成公钥
右上角头像 -> settings -> 左侧SSH and GPG keys
-> New SSH key
title 随意, key 栏输入复制的公钥
这一步须要注意,须要用刚刚生成的私钥建立一个 jenkins
凭证
注意: 私钥上下的开始以及的标记内容也要一块儿拷贝
首页 -> 左侧系统管理 -> Manage Credentials -> 添加凭据
注意: 类型选择
SSH Username with private key
, 描述以及 Username 随意
首页 -> 新建任务 -> 输入任务名称 -> 构建一个自由风格的软件项目 -> 肯定
正常状况能够看到这个页面
源码管理选择 Git -> 输入远程仓库地址 -> 选择以前添加的凭证 -> 分支指定 master -> 保存
注意: 这一步输入远程仓库以后会测试链接,未选择凭证会报错误信息,选择凭证后,若是配置正确,短暂的时间以后错误信息会消失,表明远程仓库链接成功.若错误信息不消失,可能会构建项目失败,需检查配置是否正确.分支信息我这里指定的 master
首页 -> 构建项目 -> 查看日志
若是配置正确,能够看到构建完成最终的状态为: Finished: SUCCESS
进行到这一步实现了手动构建,接下来实现自动构建
完成自动化部署,主要是经过 github-webhook
.简单来讲就是github-webhook
通知 jenkins
要进行构建了.
引用维基百科介绍
在web开发过程当中的webhook,是一种经过一般的callback,去增长或者改变web page或者web app行为的方法。这些callback能够由第三方用户和开发者维持当前,修改,管理,而这些使用者与网站或者应用的原始开发没有关联。webhook这个词是由Jeff Lindsay在2007年在计算机科学hook项目第一次提出的。
个人理解是相似于"发布订阅模式",github-webhook
发布更新, jenkins
监听,收到通知进行更新.不管发布或者监听,须要经过某种方式来肯定彼此的身份,进行关联,所以须要对两端进行配置.
右上角头像 -> settings -> 左侧 Developer settings -> Personal access tokens -> Generate new token
note 随意填,勾选如下两项,点击 generate token
注意拷贝生成的 token,离开就消失了
配置仓库的 web-hook:
仓库首页 -> settings -> 左侧 webhooks -> add webhook
注意: 这里的 Payload URL只能使用公网域名,因为本次搭建的是本地 jenkins 环境,所以须要使用内网穿透工具,我用的是蜻蜓映射.
Payload URL
: 输入当前jenkins
容器运行端口映射出去的公网域名 + /github-webhook/
Content type
: 选择 application/json
Secret
: 填入刚刚生成的 token 其他默认
jenkins
首先建立一个凭证: 首页 -> 系统管理 -> Manage Credentials -> 添加凭据 -> 选择 Secret text
而后对改凭证进行配置:
首页 -> 系统配置 -> GitHub -> 高级 -> 覆盖 Hook URL -> 输入 web-hook 地址 -> 选中建立的凭证
完成配置后,代码仓库更新以后 jenkins
会自动进行构建
项目代码须要打包以后才能被正确使用,接下来在 jenkins
端进行代码构建操做
首页 -> 系统管理 -> 插件管理 -> 可选插件 -> 选中 NodeJS
以及 Publish Over SSH
-> 安装 -> 等待安装完成
NodeJS
: 代码运行环境Publish Over SSH
: 打包完成后发送到服务器首先配置全局 NodeJS
插件:
首页 -> 系统管理 -> 全局工具配置 -> NodeJS -> 新增
构建项目中新增 NodeJS
构建环境:
项目配置 -> 构建环境 -> 选择刚刚配置的 node 环境 -> 构建 -> 执行 shell -> 安装依赖 -> 打包 -> 压缩
echo "hello world"
npm install
npm run build
cd dist
tar zcvf dist.tar.gz ./*
复制代码
配置完以后手动点击构建,查看日志查看构建状态,操做成功能够进到 docker-jenkins
容器内部检查 dist.tar.gz
文件是否存在
publish over ssh
插件首页 -> 系统管理 -> 系统配置 -> Publish over SSH -> SSH Servers
这里我是用的是用户密码登陆,也可以使用 ssh 的方式链接服务器.输入完毕能够进行链接测试
项目配置 -> 构建后操做 -> SSH Server -> Transfers
Source files: 发送的文件(相对路径为当前项目路径)
Remove prefix: 要去掉的前缀
Remote directory: 远端服务器目录(不存在会报错)
Exec command: 发送成功以后要在服务器进行的脚本操做,如:解压,删掉多余的文件
复制代码
贴上脚本代码
cd 文件发送的目录
tar zxvf dist.tar.gz
rm -rf dist.tar.gz
复制代码
最后尝试推送代码,验证自动化构建部署~
正常状况下服务器上会收到发送的文件,到这一步本地全自动构建成功啦