Gitlab 9.5 构建触发器未按预期工作
Gitlab 9.5 build trigger not working as expected
我们在 Gitlab EE 9.5.0-ee 36112e7
。
我对构建触发器有疑问。我有一个设置,每周通过 Jenkins 使用 curl
触发器触发构建。此作业通常会在 Pipelines
下显示一个标签 API
,当我单击它时,我可以在右侧栏中看到任何变量。
但是,在最近的 Gitlab 版本中,这种情况不再发生了。任何此类触发的工作都没有像以前那样被标记,我也没有看到变量。因此,例如,以下逻辑永远不会触发(可能是因为 CI_PIPELINE_TRIGGERED
未设置):
script:
- |
if [ "$CI_PIPELINE_TRIGGERED" = "true" ]; then
if [ "$BUILD_TRIGGERED_BY" != "Jenkins" ]; then
echo "This build does not seem to be triggered by Jenkins. Skipping..."
exit 0;
fi;
fi;
知道为什么吗?
而且,这是我在 Jenkins 中使用的 curl
触发器:
curl -kf -X POST \
-F token="$TOKEN" \
-F ref="master" \
-F "variables[BUILD_TRIGGERED_BY]=Jenkins" \
-F "variables[DATE]=$(date +'%Y%m%d')" \
"https://gitlab.host.com/api/v4/projects/<id>/trigger/pipeline"
上面的 TOKEN
是来自该项目 /settings/ci_cd
页面的触发器令牌。
基本上,即使上述命令启动了一个新构建,它也不会被视为 触发 构建。我什至重新生成了一个令牌以用于 Jenkins 脚本,但这也没有帮助。
这个完全相同的设置以前工作过。
编辑 1:
所以,我更新了 CI 中的 script
以在触发时回显这些变量,即使 $BUILD_TRIGGERED_BY
变量出现了预期值,它也是 $CI_PIPELINE_TRIGGERED
变量是空的,导致我的逻辑动摇。这可能解释了为什么构建在 Pipelines 视图中未标记为 by API
。
我仍然不确定为什么 :(.
我也遇到了一些意外的触发器行为。
尝试使用 form-urlencoding 而不是 multipart-form:
curl -vk \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "token=$TOKEN&ref=master&variables[BUILD_TRIGGERED_BY]=Jenkins7&variables[DATE]=$(date +'%Y%m%d')" \
https://gitlab.host.com/api/v4/projects/<id>/trigger/pipeline
我使用 GitLab Community Edition 9.3.9,然后变量再次出现。
然而,这仍然没有用 'API' 标记管道 运行 - 这似乎只适用于 legacy triggers.
对于给您带来的不便,我们深表歉意。这个错误发生在 9.5 中,因为我们更改了存储触发变量的位置以获得更好的架构。我们已经解决了这个问题,补丁将进入 10.0。
我们还考虑发布下一个补丁版本 (9.5.x) 来修复此回归。对于不想马上升级到10.0的用户。
这是 CE 存储库上的问题跟踪器; https://gitlab.com/gitlab-org/gitlab-ce/issues/37559
我们在 Gitlab EE 9.5.0-ee 36112e7
。
我对构建触发器有疑问。我有一个设置,每周通过 Jenkins 使用 curl
触发器触发构建。此作业通常会在 Pipelines
下显示一个标签 API
,当我单击它时,我可以在右侧栏中看到任何变量。
但是,在最近的 Gitlab 版本中,这种情况不再发生了。任何此类触发的工作都没有像以前那样被标记,我也没有看到变量。因此,例如,以下逻辑永远不会触发(可能是因为 CI_PIPELINE_TRIGGERED
未设置):
script:
- |
if [ "$CI_PIPELINE_TRIGGERED" = "true" ]; then
if [ "$BUILD_TRIGGERED_BY" != "Jenkins" ]; then
echo "This build does not seem to be triggered by Jenkins. Skipping..."
exit 0;
fi;
fi;
知道为什么吗?
而且,这是我在 Jenkins 中使用的 curl
触发器:
curl -kf -X POST \
-F token="$TOKEN" \
-F ref="master" \
-F "variables[BUILD_TRIGGERED_BY]=Jenkins" \
-F "variables[DATE]=$(date +'%Y%m%d')" \
"https://gitlab.host.com/api/v4/projects/<id>/trigger/pipeline"
上面的 TOKEN
是来自该项目 /settings/ci_cd
页面的触发器令牌。
基本上,即使上述命令启动了一个新构建,它也不会被视为 触发 构建。我什至重新生成了一个令牌以用于 Jenkins 脚本,但这也没有帮助。
这个完全相同的设置以前工作过。
编辑 1:
所以,我更新了 CI 中的 script
以在触发时回显这些变量,即使 $BUILD_TRIGGERED_BY
变量出现了预期值,它也是 $CI_PIPELINE_TRIGGERED
变量是空的,导致我的逻辑动摇。这可能解释了为什么构建在 Pipelines 视图中未标记为 by API
。
我仍然不确定为什么 :(.
我也遇到了一些意外的触发器行为。 尝试使用 form-urlencoding 而不是 multipart-form:
curl -vk \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "token=$TOKEN&ref=master&variables[BUILD_TRIGGERED_BY]=Jenkins7&variables[DATE]=$(date +'%Y%m%d')" \
https://gitlab.host.com/api/v4/projects/<id>/trigger/pipeline
我使用 GitLab Community Edition 9.3.9,然后变量再次出现。 然而,这仍然没有用 'API' 标记管道 运行 - 这似乎只适用于 legacy triggers.
对于给您带来的不便,我们深表歉意。这个错误发生在 9.5 中,因为我们更改了存储触发变量的位置以获得更好的架构。我们已经解决了这个问题,补丁将进入 10.0。
我们还考虑发布下一个补丁版本 (9.5.x) 来修复此回归。对于不想马上升级到10.0的用户。
这是 CE 存储库上的问题跟踪器; https://gitlab.com/gitlab-org/gitlab-ce/issues/37559