我在使用Jenkins + Gerrit时遇到了麻烦.
这是我到目前为止所得到的:
Jenkins中的Gerrit Trigger配置似乎没问题:当我推出一个新的变更集时,会启动Jenkins构建.
我用过这个: Jenkins:Gerrit Trigger问题的 设置也能够"手动"启动它.
至于我的配置,我有这样的东西:https://stackoverflow.com/a/18347982/2248987.Branch Specifier是$ GERRIT_BRANCH,Ref Spec是$ GERRIT_REFSPEC
Gerrit和Git正在自行处以罚款.访问似乎也可以.
这是我的问题.构建时(gerrit触发或手动),日志输出为:
> git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
> git config remote.origin.url ssh://user@host:29418/testproject # timeout=10
Fetching upstream changes from ssh://user@host:29418/testproject
> git --version # timeout=10
using GIT_SSH to set credentials
> git -c core.askpass=true fetch --tags --progress ssh://user@host:29418/testproject refs/heads/master
> git rev-parse origin/$GERRIT_BRANCH^{commit} # timeout=10
> git rev-parse $GERRIT_BRANCH^{commit} # timeout=10
ERROR: Couldn't find …Run Code Online (Sandbox Code Playgroud) 我已经按照 Jenkins 安装文档中的文档在 Ubuntu 服务器中安装了 Jenkins ,并且正在尝试设置Gerrit Trigger Plugin。在设置管理设置部分时,SSH 密钥文件部分始终给出错误“/var/lib/jenkins/.ssh/id_rsa”不是有效的密钥文件。
我已在默认位置“/var/lib/jenkins/”中以 Jenkins 用户身份生成了 ssh 密钥
ssh-keygen我尝试使用,生成密钥ssh-keygen -t rsa,ssh-keygen -t rsa -b 2048并且密钥是使用或不使用密码短语生成的,也作为 pem 文件生成,但仍然显示为无效密钥文件。
这些文件位于“/var/lib/jenkins/.ssh/”位置
jenkins@jenkins:~/.ssh$ ls -la
total 16
drwx------ 2 jenkins jenkins 4096 Oct 9 14:18 .
drwxr-xr-x 17 jenkins jenkins 4096 Oct 9 14:18 ..
-rw------- 1 jenkins jenkins 2602 Oct 9 14:05 id_rsa
-rw-r--r-- 1 jenkins jenkins 569 Oct 9 14:05 …Run Code Online (Sandbox Code Playgroud) Jenkins Gerrit 触发器插件有一个按钮“添加禁止文件路径”,但实际上没有太多可用的文档。
那么它的确切行为是什么?
如果
“文件路径”=^((?!_abc)(?!_def).)*$
行为等于:
“禁止文件路径”= ^.*_abc$|^.*_def$?
因此,我们在Jenkins CI构建管理器上使用Gerrit Trigger(2.23.0)并使用docker容器进行实际构建.
Gerrit Repo轮询最近出现在我们的一些分支机构中的问题是失败并导致它每次都"检测到变化",所以尽管没有变化,它仍在不断重建.
检查Gerrit Repo Polling Log以查找任何受影响的作业,并提供以下输出之一:
Started on Feb 1, 2017 3:12:25 PM
Polling SCM changes on aosp-host
[workspace] $ repo init -u http://xxx.xxx.xxx.xxx/git/project/platform/manifest.git -b branch -m branch.xml
Get https://gerrit.googlesource.com/git-repo/clone.bundle
Get https://gerrit.googlesource.com/git-repo
fatal: Not a git repository: '/home/jenkins/workspace/.repo/manifests.git'
fatal: Not a git repository: '/home/jenkins/workspace/.repo/manifests.git'
fatal: cannot obtain manifest http://xxx.xxx.xxx.xxx/git/project/platform/manifest.git
Done. Took 1 min 19 sec
Changes found
Run Code Online (Sandbox Code Playgroud)
或者,如果构建已经构建(gerrit在进行scm轮询之前等待构建完成)
Started on Feb 2, 2017 3:24:15 AM
Polling SCM changes on aosp-host
[workspace] $ repo init -u …Run Code Online (Sandbox Code Playgroud) 我目前正尝试使用Jenkins Gerrit-Trigger发出"+1 Verified",但有些原因是+1失败了.
由于插件能够成功地向相关的Gerrit变更集发出"-1 Verified"和"Build Started"注释,因此权限似乎是有序的.
当工作成功时,"+1已验证"永远不会实现.检查Jenkins日志显示与作业相关的最后一个条目显示403响应错误:
Jenkins日志也显示相同的请求:
com.sonymobile.tools.gerrit.gerritevents.workers.rest.AbstractRestCommandJob run
SEVERE: Gerrit response: Forbidden
Run Code Online (Sandbox Code Playgroud)
格里特也接受了请求和403响应:
"POST /a/changes/tdmdev~develop~Id917dda3449bf9af738ad7f122adaecba70004bd/revisions/7eab7e90c6b7e66f23faaac7cbfd40d8c9c93726/review HTTP/1.1" 403 46 - "Apache-HttpClient/4.5.2 (Java/1.8.0_77)"
Run Code Online (Sandbox Code Playgroud)
我已经过测试,看看是否有任何关于API的问题,并且使用Gerrit日志中的URL成功报告了"+1 Verify":
curl -v -X POST -d '{"reviewer":"srv_devops_jenkins","labels":{"Verified":"+1"}}' -H "Content-Type: application/json" --user "srv_devops_jenkins:***" --digest http://foobar.com:8080/a/changes/tdmdev~develop~Id917dda3449bf9af738ad7f122adaecba70004bd/revisions/7eab7e90c6b7e66f23faaac7cbfd40d8c9c93726/review
Run Code Online (Sandbox Code Playgroud)
Gerrit Trigger配置为支持RESTClient请求,我已确保以下内容:
我成功的唯一方法是禁用"REST API"并通过SSH连接发出请求,唯一的缺点是我们需要在自定义标签上发出+ 1,据我所知,这些标签不受支持通过Gerrit-Trigger通过SSH.
Versions:
Jenkins: 2.48
Gerrit-Trigger: 2.23.0
Gerrit: 2.12
Run Code Online (Sandbox Code Playgroud)
感谢您的任何帮助,您可以提供.
我想在 Jenkinsfile 中添加 gerrit 触发事件,就像我们在 JobDSL 中一样,
triggers {
upstream('pipeline_properties', 'UNSTABLE')
gerrit {
events {
refUpdated()
}
project('reg_exp:jenkins', ["plain:${jenkins_branch}"])
}
}
Run Code Online (Sandbox Code Playgroud)
这在管道代码中是否可行,可以在触发器下找到诸如 cron 和内容之类的东西,但无法获得如何在其中添加 gerrit-trigger 事件的参考。
我已经用gerrit触发器插件配置了jenkins,以验证我们审阅到gerrit的每个提交。我希望此触发器将我的最新更改包含在原始回购中并进行构建。但是,它仅克隆回购项目并进行编译,而无需我进行更改。下面是我在詹金斯中的Gerrit触发器的配置设置。
Refspec: $GERRIT_REFSPEC
Branches to build: $GERRIT_BRANCH
Build trigger: Gerrit event
Trigger on: patch set created
Gerrit project: added project and branch
Run Code Online (Sandbox Code Playgroud) 我们在Jenkins中使用gerrit-trigger,当推送新的变更集进行审核时会触发构建.
现在我们要介绍管道并使用解决方案在scm中定义管道
因此,我们期望在构建被触发时,管道插件下方可以检查此refspec
但是${GERRIT_REFSPEC}这里没有效果,它仍然可以检查主人
> git rev-parse refs/remotes/origin/master^{commit} # timeout=10
> git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
Checking out Revision adf5d360582b1b24f088cfa8ac0f0ebf64a57692 (refs/remotes/origin/master)
Commit message: "DO:CI End of summer"
> git config core.sparsecheckout # timeout=10
> git checkout -f adf5d360582b1b24f088cfa8ac0f0ebf64a57692
有什么建议它是如何工作的?
通常,我们在jenkins中使用gerrit触发器插件来下载gerrit变更集。
但是在某些情况下,我们想直接下载特定的变更集。
git pull git://git.openstack.org/openstack/tripleo-quickstart-extras refs/changes/32/503032/2
Run Code Online (Sandbox Code Playgroud)
并设置Refspec到refs/changes/32/503032/2像混帐回购协议
并启用Honor refspec on initial clone其他行为,例如
但是我在控制台日志中出现错误
从git://git.openstack.org/openstack/tripleo-quickstart-extras获取上游更改
> git fetch --tags --progress git://git.openstack.org/openstack/tripleo-quickstart-extras refs / changes / 32/503032/2 --depth = 1
> git rev-parse refs / remotes / origin / master ^ {commit}#timeout = 10
> git rev-parse refs / remotes / origin / origin / master ^ {commit}#timeout = 10
> git rev-parse origin / master ^ {commit}#timeout = 10
错误:找不到要构建的任何修订。验证此作业的存储库和分支配置。 … Jenkins Gerrit 触发器插件为GERRIT_CHANGE_COMMIT_MESSAGE和GERRIT_EVENT_COMMENT_TEXT提供编码值
我如何解密它 - 使其易于阅读?