实现 jenkins + docker 自动化发布
1 )jenkins 下载
- 地址:https://www.jenkins.io/download/
- 选择合适的版本,比如 mac 上 $
brew install jenkins-lts
- 建议使用 docker 搭建,下面用 mac上整体流程演示
2 )jenkins 管理
- 以Mac来说
- 启动:$
brew services start jenkins-lts
- 重启:$
brew services restart jenkins-lts
- 更新:$
brew upgrade jenkins-lts
3 )jenkins 访问
- 默认是: http://localhost:8080,这里可以修改端口
- 一开始会进入到注册页面,在注册页面填写必要的信息
- 解锁 Jenkins
- 输入密码,在服务器(本机)的下面的文件
- ~/.jenkins/secrets/initialAdminPassword
- 注:这里演示的是 Mac 环境
- 输入管理员密码,如上密码,之后,加载中
- 自定义 Jenkins
- 1 )安装推荐的插件 (可以按照这个推荐的选项来)
- 2 )选择插件来安装
- 选择后,就是加载中
- 还有管理员用户的初始化工作
- 解锁 Jenkins
4 )可能遇到的问题
-
如果安装过程中出现 brew 命令的升级问题,可采用如下方法解决
-
删除 homebrew
shellecho "$(brew --repo)" rm -rf /usr/local/Homebrew/
- echo 海贼高命令输出 brew 的位置
- rm 删除brew的位置
-
重新安装 homebrew
- $
/bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)"
- $
5 )Jenkins 的工作流配置
5.1 全局配置
- 系统管理 => 插件管理,安装 publish-over-ssh 插件
- 插件地址: https://plugins.jenkins.io/publish-over-ssh
- 用于将本地文件上传到 ssh 服务器的
- 系统管理 => 系统配置,配置环境变量、Github Server、SSH Servers
- 1 )环境变量配置
- Dashboard/系统管理/System
- 在全局属性下, 键值对列表新增
- 键: PATH
- 值: 这里填入自己的系统变量,如在终端中输入 $
$PATH
得到的系统变量的设置,填入自己主机的环境变量- 或者 $
echo $PATH
得到的值
- 或者 $
- 配置这个PATH之后,你的npm等环境就可以使用了
- 注意,PATH中无关的项可以删除
- 2 )Github Server
- 向下,找到 GitHub Server,这里主要是找github请求用的
- 新增 GitHub Server
- 主要是 凭据 这里,点击 添加 下面下拉出jenkins,点击
- 这个秘钥是在 github 网站自己账户的 settings / Developer settings / Personal access tokens / Tokens (classic)
- 把这里的tokens 添加到 新增的 Secret text 中,点击连接测试
- 测试成功的话,表示可以调用 API 了
- 另外,如果有多个github服务的话,添加多个
- 3 )Publish over SSH
- 当安装了这一个插件之后,就会出现这个选项
- 关键在 SSH Servers 下面
- 在 Hostname, 填写域名或ip地址
- Remote Directory 中填写 远程的目录地址
- 如果需要密码等鉴权,点击高级,填入服务器的一些秘钥
- 1 )环境变量配置
5.2 工作流任务
-
创建任务
- 在 jenkins 系统的 Dashboard 中,点击新建任务
- 在最顶层输入自己起的任务名称
- 选择构建一个自由风格的软件项目
- 点击确定
- 之后,进入配置,在 左侧的 General 中
- 勾选 Gihub 项目
- 项目 URL 填入 自己所在 github的地址
- 进入 源码管理
- 选择 git
- 输入用于代码仓库 clone 的 ssh 的 git源
- Credentials 下选择之前填入token
- Branches to build 下指定分支
- 一般分支是 refs/head/master
- 源码库浏览器选择 自动
- 进入 构建触发器
- 勾选 GitHub hook trigger for GITScm polling
- 进入 Build Steps
- 增加构建步骤,下拉选择 执行 shell (也可以选择 Send files or execute commands over SSH)
- 填入
echo $PATH
- 点击保存, 之后就是进入这个任务的主页
- 可以点击立即构建, 构建后就会在 构建历史中增加一条记录, 点击进入
- 可以看到控制台输出的所有信息
- 它会把项目下载到本地,把最新的变更也展示出来, 比如新的hashId, 新的message等信息
- 基于此配置,就创建完成一个任务了
- 在 jenkins 系统的 Dashboard 中,点击新建任务
-
配置任务
- github 项目
- 源码管理 (Git)
- 勾选 GitHub hook trigger for GITScm polling
- 构建环境,配置 Use secret text(s) or file(s)
- 配置 Build Steps
- 配置 Shell
- 配置 SSH
-
WEB Hooks 具体配置
- 在代码push的时候,触发一个钩子来执行特定的任务
- 在代码仓库中,找到 Settings
- 在 General 下找到 Code and automation 中 Actions 的 General 下
- 勾选 Disable actions
- 这个必须要 disable 下
- 找到 Webhooks
- add webhook 输入密码
- 找到 Payload URL, 输入 url
- 这里不能用 localhost:8080,会报错,因为一是限制了只能在本机实现, 远程访问肯定找不到
- 可以把本地的端口号映射到线上域名
- 可以使用 smee.io 这个应用
- 找到 Secret, 这里的 secret 可以在本地项目中 ls -la
- 里面会有一个 .git_token 的隐藏文件
- 这个文件里的就是上面的 Secret
-
搜索 smee.io, Start a new channel
- 本地安装 smee
- $
npm i -g smee-client
- 启动域名映射
- smee --url https://smee.io/6FxJjA0nZoOQKXY --path /github-webhook/ --port 8080
- webhook 在安装完github插件后会自动生成一个地址,这个地址是
/github-webhook
- 这是一个固定的用法, 当回车完成后,
- https://smee.io/sssfss2s0s 这类地址就会映射到本地的 http://127.0.0.1:8080/github-webhook/
- webhook 在安装完github插件后会自动生成一个地址,这个地址是
- smee --url https://smee.io/6FxJjA0nZoOQKXY --path /github-webhook/ --port 8080
- 连接成功后,就可以用这个地址了
- 把上述 生成的 https://smee.io/sssfss2s0s 这类地址配置到 github 的 webhook 的 Payload URL 中
- 同时,Payload URL 下面的 Content-type 中选择 application/json
- 接着下面的 Which events would you like to trigger this webhook?
- 选择 Just the push event.
- 保存
-
成功后,每次触发push, 就会在 Recent Deliveries 中添加一条 ping 的记录
-
接下来,通过 webhook 触发的时候,触发的是通过本机构建的
-
当在本地项目中提交并推送代码到 github 远程的时候, 可以看到 smee 终端出现了一条记录
-
而 github 的webhook Recent Deliveries 中也出现了一条记录
-
同时,jenkins 项目任务中也有一条新的构建任务生成
- 1 )在 GitHub Hook Log 中 有 git push 触发的时间
- 以及触发url的过程, 再加上后续执行所有代码的过程
- 2 )在 修改记录 选项中,也有一条修改记录
-
这些就是我们想要的结果, 说明这条链路已经打通了