目的
本地搭建 docker + jenkins
部署系统, 通过 github
的 webhook
实现代码自动化部署.
准备工作
安装docker
mac: docs.docker.com/docker-for-…
windows: docs.docker.com/docker-for-…
liunx:
// 推荐脚本安装方式
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
控制台输入 docker -v
, 显示版本则安装成功
Docker version 20.10.5, build xxxxx
安装 jenkins
控制台输入docker search jenkins
,选择安装jenkinsci/blueocean
镜像,比较稳定.
控制台输入
docker pull jenkinsci/blueocean
,下载完成之后输入docker images
看到如下信息即安装成功
启动 jenkins
控制台输入docker run -d --name docker-jenkins -p 8008:8080 -p 50000:50000 jenkinsci/blueocean
启动容器,启动成功会返回该容器 id
浏览器打开本地 8008 端口,正常情况下会出现解锁
jenkins
页面
获取初始化密码
下一步需要进入容器内拿到密码,以我刚刚启动的容器为例,控制台输入docker exec -it docker-jenkins bash
进入容易内,然后输入cat /var/jenkins_home/secrets/initialAdminPassword
输入控制台返回的密码进入配置页面,这里选择安装推荐的插件,可能会有安装失败的插件,重试即可
创建用户
插件安装完成后,输入信息创建用户
实例配置不变继续点击下一步,此时需要重启动,重启完成登录刚刚创建的用户即可,接下来进行配置环节
配置
下面对 github 以及 jenkins 进行配置
在容器内生成 ssh 公钥
进入docker-jenkins
容器内,输入ssh-keygen -t rsa -C test@test.com
,连续回车生成公钥
添加公钥 ☞ github
右上角头像 -> settings -> 左侧SSH and GPG keys
-> New SSH key
title 随意, key 栏输入复制的公钥
添加私钥 ☞ jenkins
这一步需要注意,需要用刚刚生成的私钥创建一个 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,离开就消失了
配置 github
配置仓库的 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
最后尝试推送代码,验证自动化构建部署~
正常情况下服务器上会收到发送的文件,到这一步本地全自动构建成功啦