jenkins(8): 实战jenkins+gitlab持续集成发布php项目(代码不需要编译)

时间:2023-01-12 21:39:43

一. jenkins 的配置

1.前提条件安装了GitLab Plugin (源码管理使用),GitLab Hook(gitlab webhook需要)

Manage Jenkins--->Manage Plugin ---->Available 去找到安装。

2.  创建 job ,选择 *风格的项目,点击ok

jenkins(8): 实战jenkins+gitlab持续集成发布php项目(代码不需要编译)

3. 源码管理

  描述配置

jenkins(8): 实战jenkins+gitlab持续集成发布php项目(代码不需要编译)

源码管理:要想连接 gitlab服务器,有两种选择,用http协议或者 ssh协议,这里我们使用ssh

首先填写  gitlab 的url

jenkins(8): 实战jenkins+gitlab持续集成发布php项目(代码不需要编译)

配置到gilab 的认证: Credentials ,点击ADD,复制 gitlab ssh密钥对的私钥到下图.

jenkins(8): 实战jenkins+gitlab持续集成发布php项目(代码不需要编译)

认证成功如下图:没有任何报错了

jenkins(8): 实战jenkins+gitlab持续集成发布php项目(代码不需要编译)

  说明:  如果 gitlab 配置了ssh 密钥对,jenkins这边也添加了 包含私钥的凭证还是无法正常连接的话,参考: https://www.cnblogs.com/yitianyouyitian/p/10027552.html

4. 构建触发器设置

  勾选如下, 下面的url是回调地址, gitlab webhook 那边的设置会用上.

jenkins(8): 实战jenkins+gitlab持续集成发布php项目(代码不需要编译)

区分分支 触发构建 设置如下: 只用master分分支变化后才会触发构建.

jenkins(8): 实战jenkins+gitlab持续集成发布php项目(代码不需要编译)

5. 构建

选择  Execute shell

jenkins(8): 实战jenkins+gitlab持续集成发布php项目(代码不需要编译)

shell脚本编写,将 代码同步到web服务器目录,重启服务。

注意: shell命令的执行 是在 jenkins 的job 的workspace 目录进行的. 这里是项目 php1的工作目录  /root/.jenkins/workspace/php1 。jenkins从gitlab pull的代码就是放置在这里.

jenkins(8): 实战jenkins+gitlab持续集成发布php项目(代码不需要编译)

注意: 在这踩坑了,执行 rsync 总是失败,提示permission deny。问题是ssh 无密码访问的问题。这里的jenkins 访问 远程主机  使用的不是默认名字(id_rsa等)的密钥。解决方法如下.

#在 /etc/ssh/ssh_config 添加如下内容

#指明命令中 需要ssh 远程的主机锁使用的用户和密钥。
Host 172.10.30.228
user root
IdentityFile ~/.ssh/id_rsa1 #防止弹出判断选择
StrictHostKeyChecking no

二. gitlab 配置

1. gitlab webhook 设置

进入 project .点击 setting-----> integrations设置。注意不是 管理区域的 系统钩子.

填写 上面  构建触发器中的 url. 安全令牌有无都可以(令牌来自jenkins构建触发器中选中的Build When a change is pushed右下角的高级选项,有一个Secret token,点击 Generate,会生成一个安全代码).

点击 test来测试是否可以成功触发.

jenkins(8): 实战jenkins+gitlab持续集成发布php项目(代码不需要编译)

出现的问题: test 的时候 出现403 anonymous is missing the Job/Build permission  错误。参考: https://blog.csdn.net/u011662047/article/details/80525503

两步解决问题 (测试了,其实只需要第一步就ok了。)
1. 系统管理 -> 插件管理 -> 安装插件gitlab hook

2. 系统管理 -> 系统设置 -> 去掉 Enable authentication for ‘/project’ end-point

jenkins(8): 实战jenkins+gitlab持续集成发布php项目(代码不需要编译)

其他朋友总结的错误:

https://www.cnblogs.com/zblade/p/9480366.html

再记录一个坑:  gitlab 这边 test web hook 成功。但是push后不触发jenkins的构建.找了半天是gitlab 的服务sidekiq 和unicorn没有启动,吐血了。。。