Jenkins项目发布基础
目录
- 案例环境
- jenkins实现静态web网站自动发布
- 1:案例说明
- 2:web01服务器上安装httpd
- 3:上传代码到gitlab
- 4:在 jenkins 中添加远程 web 主机
- 5:jenkins 中设置项目构建参数
- 带有参数的项目发布
- 1:更新项目代码并提交到仓库
- 2:Jenkins项目设置
- Jenkins项目实时自动触发
- 1:设置“构建触发器”
- 2:设置Gitlab的触发机制
- jenkins+ansible+gitlab 实现 PHP 项目发布
- 1:安装LAMP环境
- 2:jenkins主机安装Ansible插件
- 3:创建空项目
- 4:提交代码到Gitlab仓库
- 5:jenkins创建项目并发布测试
案例环境
设备清单
jenkins实现静态web网站自动发布
1:案例说明
本案例部署了一个简单的静态网站,通过此操作过程,主要掌握代码发布的基本流程,以及在这个过程中我们需要注意的重点环节,也是掌握 ienkins 项目发布的入门级操作。在这些操作中,进一步学习jenkins 持续集成、持续部署流程。
2:web01服务器上安装httpd
3:上传代码到gitlab
创建空白项目league
克隆空项目到dev上
设置用户信息并将所需的网站代码上传到league目录中
初始化本地仓库,提交到暂存区、本地仓库
为分支命名为main
git branch -M main
将分支版本提交到远程仓库
查看提交结果
httpd主机改名
dev主机改名
4:在 jenkins 中添加远程 web 主机
“Manage Jenkins"–>“System”–>“Publish over SsH”,点击 SSH Servers 的新增按钮。须填写的信息如下:
Name:为远程主机的起的名字;
Hostname:远程主机的 IP 地址或域名;
Username:远程主机的登录账号;
Remote Directory:远程同步路径(如果要拷贝文件,此处填写远程主机接收文件的目录);
点击高级按钮,并勾选“Use password authentication,or use different key”
在 Passphrase/Password 中输入密码;
其他保持默认,并点击 test 按钮进行连接测试,测试结果为 Success 表示参数设置成功。
最后保存设置。
可以用同样的方法添加更多的主机。
5:jenkins 中设置项目构建参数
在 Jenkins 中新建一个自由风格的项目
在源码管理中选择 Git,并且把 gitlab 中获取的仓库 URL 填写进去。
Build steps(构建步骤)设置
在本案例中,我们需要将 web 网站的代码文件同步到 web 主机,需要同步文件,需要一个发送文件的构建步骤,具体操作如下:
增加构建步骤“send files or excute commands over SSH”
需要设置的关键参数如下:
Name:在下拉菜单中选择目标主机;
Source files:选择源文件位置,注意这里是工作目录的相对路径,不要写绝对路径。我们的工作目录是“/root/.jenkins/workspace/league”,如果要同步此目录下所有内容,就填写“**/*”;如果要同步工作目录下的 image 目录下的所有文件,就填写“image/*”
Remove prefix 该操作是针对上面的 source files 目录,会移除匹配的目录。通常留空
Remote directory:远程主机的同步目录,注意这里也是相对路径。是相对于远程主机的同步目录的,我们在前面的远程主机中设置同步的目录是“/var/www/html”,此处就直接写“/”代表将文件同步到远程主机的“/var/www/html”目录下。
如果需要同时将文件批量同步到更多的主机,可以继续增加构建步骤。
Exec command:同步接收后需要在远程主机执行的命令。
保存后构建
访问测试
带有参数的项目发布
在刚才的案例中,我们掌握了项目发布的基本步骤,在实际工作过程中,程序员往往要对代码进行不断的升级,这是就出现了不同的版本,如何针对不同的项目版本进行发布,这也是 Jenkins 的一项基本功能。不仅能帮助管理员灵活的、有针对性的版本发布,同时在新版本出现 bug 的时候,又能快速的将项目回退到之前的版本。
1:更新项目代码并提交到仓库
2:Jenkins项目设置
修改 General 参数
勾选“This project is parameterized”,并点击“添加参数”,添加“Git Parameter”参数。
构建项目
Jenkins项目实时自动触发
在配置 Jenkins 实现前端自动化构建的过程中,Git 如何通知 Jenkins 对应 Job 的工作区实时构建呢?web 开发过程中的 webhook,是一种通过通常的 callback,去增加或者改变 web page 或者 web app行为的方法。这些 ca1lback 可以由第三方用户和开发者维持当前,修改,管理,而这些使用者与网站或者应用的原始开发没有关联。
webhook 这个词是由 Jeff Lindsay 在 2807 年在计算机科学 hook 项目第一次提出的。webhooks 是"user-defined HTTP 回调"。它们通常由一些事件触发,例如"push 代码到 repo",或者"post 一个评论到博客"。因此,我们可以将 jenkins 的某个项目的 webhook 放置到gitlab,当 gitlab 中对应的项
目代码有更新时,就会向 jenkins 触发一个构建的事件,这样就完成了一个项目自动触发的流程。
1:设置“构建触发器”
在 jenkins 中执行如下操作:
项目–>配置–>构建触发器,勾选项目的 webhook
复制出里面的 webhook URL: http://192.168.10.104:8080/jenkins/project/league
设置“构建触发器”的高级选项
在“构建触发器”中生成一个 Token,并且把这个 Token 复制出来:
2:设置Gitlab的触发机制
在这里要设置 gitlab 允许利用钩子(webhook)发送请求到本地网络。Menu–>Admin–>Settings–>Network–>Outbound requests
设置 0utbound request(外发请求)
勾选“允许 webhook 和服务对本地网络的请求”和“允许系统钩子向本地网络发送的请求”
打开自己创建的项目,Settings–>Webhooks
点击右上角 Add new webhook 按钮,
粘贴前面步骤中生成的 webhook 的 URL 和 Token
点击 Test 按钮,并点击 Push events,开始推送测试,观察 Jenkins 的构建界面,会发现 Jenkins 开始进行自动构建。
修改代码内容,模拟代码更新,并且将新代码提交到gitlab,然后直接观察网站访问结果,验证jenkins 是否能执行来自 gitlab 的触发请求
此处应该发现,我们在代码中修改的文字,在没有执行jenkins 构建操作的情况下,jenkins 已经自动为我们同步了代码。
jenkins+ansible+gitlab 实现 PHP 项目发布
1:安装LAMP环境
2:jenkins主机安装Ansible插件
做无密码验证
Ansible 的工作是基于 SSH 协议的,它使用 SSH 连接到远程主机并执行命令。因此在将 ansible 集成给 jenkins 的时候,需要在 jenkins 主机上生成密钥对,并同步公钥给远程 web 主机,为 ansible 的运行提供基础。
如果要结合 ansible 实现项目的自动发布,就需要在 jenkins 上添加 ansible 插件,但是只在Jenkins 中安装 Ansible 插件是不行的,还要在 Jenkins 主机上安装 Ansible 程序。
3:创建空项目
4:提交代码到Gitlab仓库
5:jenkins创建项目并发布测试
在源码管理项,选中 Git,添加代码仓库的 URL:
修改*/master 为$Tag。Tag 是上面动态获取的变量名,表示根据用户的选择确定要发布的代码版本。
设置“Build steps”参数,添加 ansible 同步参数
在“Build steps”中,点“增加构建步骤”→“Invoke Ansible Ad-Hoc command”,在这里设置的主要参数如下:
Host pattern:设置 ansible 中的主机组的名字
Inventory:选择File or host list,填写的文件是 ansible的主机清单/etc/ansible/hosts
Module:设置同步方式,此处使用“synchronize”的方式,表示使用rsync 同步
Module arguments or command to execute:填写ansible 的同步命令:命令如下:src=${WORKSPACE} dest=/var/www/html rsync opts=–exclude=.git
备注:
ansible 命令解释:
${WORKSPACE}表示该变量指向的路径是jenkis 主机从git 服务器获取到的项目/root/.jenkins/workspace
rsync_opts=–exclude=.git:同步时将,git 文件除外,该文件不同步
在“Build steps”选项中,再次点击“增加构建步骤”选择“Execute shell”,填写需要让jenkins 主机执行的 ansible 命令:
开始构建