我们都知道 Jenkins 是一个用于持续集成的工具, 所以本文简单介绍一下如何通过 Jenkins 来发布 php 代码到远程的机器上, 实验环境如下:
两台机器, 一台安装了 Jenkins 作为 Jenkins 服务器, 一台作为远程的服务器:
192.168.77.130 Jenkins 服务器
192.168.77.128 远程服务器
一个远程的公开的 git 仓库 (php 代码在这个仓库里)
如果没有安装过 Jenkins 的话, 可以参考我另一篇关于安装 Jenkins 的文章
在通过 Jenkins 发布 php 代码之前, 我们首先需要在 Jenkins 服务的 web 页面上检查一下 Git plugin 和 Publish Over SSH 两个插件是否已安装:
系统管理 管理插件 已安装, 然后搜索 Git plugin 看看是否已安装, 一般这个插件都是默认安装的:
然后再搜索 Publish Over SSH, 可以看到如果没有安装是搜索不到的:
然后到 可选插件 里安装 Publish Over SSH 插件:
安装完成:
重启 Jenkins 服务:
systemctl restart jenkins.service
确保两个插件都安装好后, 点击系统管理 系统设置, 下拉页面, 大概在网页的最下面可以找到 Publish Over SSH :
然后在服务器上先生成一对密钥:
- [root@server ~]# ssh-keygen -f /root/.ssh/jenkins
- Generating public/private rsa key pair.
- Enter passphrase (empty for no passphrase):
- Enter same passphrase again:
- Your identification has been saved in /root/.ssh/jenkins.
- Your public key has been saved in /root/.ssh/jenkins.pub.
- The key fingerprint is:
- 75:f0:ac:f1:56:6d:f4:a8:9c:d5:57:9b:e8:e3:5f:83 root@server
- The keys randomart image is:
- +--[ RSA 2048]----+
- | . o|
- | + .==|
- | o +.+o*|
- | . *.= ..|
- | S . *o |
- | .. o |
- | E ..|
- | . o|
- | . |
- +-----------------+
- [root@server ~]# ls .ssh/
- id_rsa jenkins jenkins.pub
- authorized_keys id_rsa.pub
- [root@server ~]#
生成密钥对后, 首先把公钥拷贝到远程的机器上去, 也就是把公钥的内容粘贴到
.ssh/authorized_keys
文件里, 和我们之前配置远程登录的密钥验证是一样的
拷贝完公钥之后, 我们来使用以下命令手动测试一下能否通过 ssh 登录远程的机器:
ssh -i .ssh/jenkins 192.168.77.128
能正常登录则代表没有问题, 如果出现让你出入用户密码的情况则是密钥没有配置成功, 配置成功的情况下登录是不需要密码的
完成测试确保能够正常通过 ssh 登录远程机器后, 接着就是把私钥的内容粘贴到 Key 这一栏里:
然后完成远程机器的配置, 点击 Apply 后如果不需要再继续添加远程机器则点击 保存 即可:
注: Jenkins SSH Key 这一栏默认会使用 Jenkins 管理员 admin 账户的密码, 可以不填则设置为空密码
以上我们配置完了插件以及远程机器, 现在就可以开始新建任务了:
配置项目名称与描述:
配置远程仓库的地址:
构建触发器, 以及构建环境都不需要配置, 因为我们发布的是 php 代码:
最后就是 构建 , 最核心的一步, 选择 Send files or execute commands over SSH :
简单说明:
SSH Server,Name 选择对应的服务器, Transfers, Source files 填写 **/**, 表示全部文件
Remove prefix 可以指定截掉的前缀目录, 这里留空即可, Remote directory 指定远程服务器上代码存放路径, 比如 / data/wwwroot/www.aaa.com,Exec command 为文件传输完成后要执行的命令, 比如可以是更改文件权限的命令, 设置完成后点击 Add Transfer Set, 如果还有另外的机器, 可以点击 Add Server 重复以上操作
完成以上操作后, 就可以使用这个刚刚创建的任务去工作了, 点击左面的 立即构建 , 就能把 git 上的代码发布到指定的服务器上:
构建中:
构建完成:
点击查看输出日志:
输出日志如下:
到远程机器上, 看看是否已经存在 jenkins_test 这个目录:
[root@client ~]# ll /tmp/jenkins_test/
总用量 108
drwxr-xr-x 2 nobody nobody 64 2 月 26 15:04 D11Z
drwxr-xr-x 2 nobody nobody 4096 2 月 26 15:04 D12Z
drwxr-xr-x 2 nobody nobody 23 2 月 26 15:04 D13Z
drwxr-xr-x 2 nobody nobody 4096 2 月 26 15:04 D14Z
drwxr-xr-x 2 nobody nobody 4096 2 月 26 15:04 D15Z
drwxr-xr-x 2 nobody nobody 24 2 月 26 15:04 D17Z
drwxr-xr-x 2 nobody nobody 73 2 月 26 15:04 D18Z
drwxr-xr-x 2 nobody nobody 148 2 月 26 15:04 D19Z
drwxr-xr-x 2 nobody nobody 80 2 月 26 15:04 D20Z
drwxr-xr-x 2 nobody nobody 4096 2 月 26 15:04 D21Z
drwxr-xr-x 2 nobody nobody 122 2 月 26 15:04 D22Z
-rw-r--r-- 1 nobody nobody 18044 2 月 26 15:04 LICENSE
-rw-r--r-- 1 nobody nobody 419 2 月 26 15:04 README.md
[root@client ~]#
如上, 可以看到文件都同步成功了, 而且文件的属主属组也是我们设置的 nobody 之后只要远程仓库里的源文件的内容发生改变, 需要同步到线上则只需要点击该任务的 立即构建 即可
来源: http://www.bubuko.com/infodetail-2507914.html