gitlab+jenkins中遇到的坑

1. Jeknkins

1.1 git :command not found

什么都没设置,仅仅运行

sh """git"""

时提示git:command not found,明明已经添加了环境变量,命令行有效。
原因: jenkins用户执行命令式,会从/usr/bin里找命令。
解决办法:建立软连接:

ln -s /usr/local/git/bin/git /usr/bin/git

1.2 init failed : permission denied.

错误提示:Could not init /var/lib/jenkins/workspace/tste
原因: jenkins执行命令时使用的是jenkins用户,无权限写入。
解决办法: 给jenkins用户设置权限.

chmod 777 /var/lib/jenkins

2.gitlab webhook

2.1 push event webhook 500

现象: gitlab直接跳转500页面,没有发送出请求。
原因: gitlab设置问题。
解决办法: Admin Area(扳手图标)→ settings→Outbound requests
勾选
Allow requests to the local network from hooks and services

参考

2.2 push event 之后提示403.

Error 403 No valid crumb was included in the request

原因: jenkins的CSRF设置。
解决办法: jenkins 系统设置 →系统安全设置→ CSRF Protection
取消

Prevent Cross Site Request Forgery exploits

·ps 使用Build Authorization Token Root Plugin插件似乎可以不取消这个设置,因为取消之后一直提示不太安全。

2.3 Authentication required

webhook设置为

http://xxxxxx:xxx/job/tste/build?token=.x

格式后,push event提示权限不足。
原因: jenkins 在验证token前会先验证身份,此格式没有附带身份。
解决办法1: 使用 Build Authorization Token Root Plugin 插件,并使用

http://XXXX:XX/buildByToken/build?job=XX&token=XX

设置webhook。
解决办法2: 获取用户API Token,在webhook中附带用户名和token.
参考地址

//以下防止原链接删除。

在开启用户鉴权后使用 GitLab 的 WebHook 来触发 Jenkins 构建时,test 请求就会提示 403 鉴权错误,网上搜索了一波资料,大多都是提示修改一些安全设置或者开启匿名用户的 job read 权限。开启 job 的 read 权限后副作用是任何人都可以查看你在 jenkins server 上的构建任务,这对于位于公网上的 jenkins 实例无疑是不安全的,最后发现最佳的实践方式是通过 Jenkins 的 token 来完成鉴权并向 trigger 的 url 发送请求。步骤如下:

首先获取 Jenkins 用户的 Application ID 和 token。使用一个有效账户登录 Jenkins,然后在左侧边栏中进入
People,选择自己的账户,再点击右侧 Configure,在右部面板找到 API Token 这一栏,点击 Show API Token
即可查看当前用户的 Application ID 和 Token,同时也可以在这里重置 Token。 获取请求地址,在 Job 的
configure 界面,勾选 Build Triggers 下的 Trigger builds remotely,token
自己填写一个,然后得到地址 JENKINS_URL/job/JOB_NAME/build?token=TOKEN_NAME 或者
/buildWithParameters?token=TOKEN_NAME 在需要继承系统的 WebHook 中填写该 URL,在 host
前面加上 [Application ID]:[Token]@,比如
https://myid:[email protected]/job/myJobName/build?token=my_job_token

解决办法3: 赋予匿名用户权限。(不推荐)

jenkins 系统设置 →系统安全设置→用户安全矩阵 设置匿名用户权限

参考地址

你可能感兴趣的:(devops)