Jenkins连接到特定 gitlab project 的特定branch
我采用的方法是在pipeline的script中使用git
命令来指定branch。如下:
stage('Clone repository') {
steps {
git branch: 'develop',
credentialsId: 'gitlab-credential-id',
url: 'http://gitlab.com/repo.git'
}
}
- 注意这里的credential最好用username/password type,其他类型的credential可能会报
Warning: CredentialId "xxx" could not be found.
错误。 - 如果报
stderr host key verification failed.
错误,这是因为服务器没在ssh的known_hosts里面。只需在jenkins master机器上用jenkins用户连接一次git server。
比如执行git ls-remote -h http://gitlab.com/repo.git HEAD
,并对随后的ssh warning消息输入"yes"。
个人建议使用HTTP协议连接,因为ssh协议的url格式我没搞明白,不知该如何指定用户名。。。
Jenkins Gitlab webhook设置
- 这里有个需要注意的地方,就是在jenkins中填用于gitlab连接的URL,填的是整个gitlab server的URL,而不是某个project的链接。
- 如果发现webhook test时发现类似报错:
Hook executed successfully but returned HTTP 403
Hook execution failed: java.lang.Exception: anonymous is missing the Job/Build permission at ...
则可参考链接中legshort的回答,添加secret token。
Jenkins 添加slave服务器
添加服务器并使用SSH连接时,常常出现一个报错:
No Known Hosts file was found at /var/jenkins_home/.ssh/known_hosts
Known Hosts是SSH中的一个概念。SSH会将所有连接过的节点保存在.ssh/known_hosts
文件中。而陌生的节点,当然不在known host里面。
要解决上面的问题,只需要保证使用jenkins的用户在master节点上曾经通过ssh连接过slave节点即可。
此外,注意你在添加slave服务器的工作路径时,确保你在slave服务器上使用的用户可以访问那个路径。否则会报 permission 相关的错误。
Jenkins script中使用sudo命令
一般不推荐jenkins作为root用户运行。
但是作为一般用户运行时,script中有命令需要用到sudo的话,会报sudo: no tty present and no askpass program specified
。
我采用的解决方法是,编辑sudoer文件,使得用户在使用sudo时无需输入密码。(当然,首先需要该用户在sudo组里)。具体步骤参考链接。
在有些系统下,可能需要将改动放在sudoer文件的最后一行。
Jenkins邮件设置
推荐使用 Email Extension插件。
有两个地方需要注意:
- 邮箱的服务器地址要写对。
比如QQ邮箱的服务器地址为smtp.qq.com
,而企业邮箱的服务器地址为smtp.exmail.qq.com
,两者不要搞混。
至于端口、是否启用SSL等,在邮箱的设置页面中一般会有解释。 - 如果报错
SMTPSenderFailedException: 501 mail from address must be same as authorization user
,检查全局设置中的System Admin e-mail address与发送邮件的username是否一致。
个人猜测,System Admin e-mail address中的内容属于authorization user。而设置的用户名/密码作authentication用,并且作为邮件中的from address。两者不一致,才会出现以上报错。
authentication证明你的身份,authorization证明你有这个权限