Add ref parameter for triggerring builds with gitlab webhook from other project.
This commit is contained in:
parent
c5e147de12
commit
ff8194e0ec
|
@ -1,5 +1,9 @@
|
|||
module TriggersHelper
|
||||
def builds_trigger_url(project_id)
|
||||
"#{Settings.gitlab.url}/api/v3/projects/#{project_id}/trigger/builds"
|
||||
def builds_trigger_url(project_id, ref: nil)
|
||||
if ref.nil?
|
||||
"#{Settings.gitlab.url}/api/v3/projects/#{project_id}/trigger/builds"
|
||||
else
|
||||
"#{Settings.gitlab.url}/api/v3/projects/#{project_id}/ref/#{ref}/trigger/builds"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -75,6 +75,16 @@
|
|||
stage: deploy
|
||||
script:
|
||||
- "curl -X POST -F token=TOKEN -F ref=REF_NAME #{builds_trigger_url(@project.id)}"
|
||||
%h5.prepend-top-default
|
||||
Use webhook
|
||||
|
||||
%p.light
|
||||
Add the following webhook to another project for Push and Tag push events.
|
||||
The project will be rebuilt at the corresponding event.
|
||||
|
||||
%pre
|
||||
:plain
|
||||
#{builds_trigger_url(@project.id, ref: 'REF_NAME')}?token=TOKEN
|
||||
%h5.prepend-top-default
|
||||
Pass build variables
|
||||
|
||||
|
@ -83,10 +93,18 @@
|
|||
%code variables[VARIABLE]=VALUE
|
||||
to an API request. Variable values can be used to distinguish between triggered builds and normal builds.
|
||||
|
||||
%pre.append-bottom-0
|
||||
With cURL:
|
||||
|
||||
%pre
|
||||
:plain
|
||||
curl -X POST \
|
||||
-F token=TOKEN \
|
||||
-F "ref=REF_NAME" \
|
||||
-F "variables[RUN_NIGHTLY_BUILD]=true" \
|
||||
#{builds_trigger_url(@project.id)}
|
||||
%p.light
|
||||
With webhook:
|
||||
|
||||
%pre.append-bottom-0
|
||||
:plain
|
||||
#{builds_trigger_url(@project.id, ref: 'REF_NAME')}?token=TOKEN&variables[RUN_NIGHTLY_BUILD]=true
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
title: Make it possible to trigger builds from webhooks
|
||||
merge_request: 7022
|
||||
author: Dmitry Poray
|
|
@ -58,6 +58,22 @@ below.
|
|||
See the [Examples](#examples) section for more details on how to actually
|
||||
trigger a rebuild.
|
||||
|
||||
## Trigger a build from webhook
|
||||
|
||||
> Introduced in GitLab 8.14.
|
||||
|
||||
To trigger a build from webhook of another project you need to add the following
|
||||
webhook url for Push and Tag push events:
|
||||
|
||||
```
|
||||
https://gitlab.example.com/api/v3/projects/:id/ref/:ref/trigger/builds?token=TOKEN
|
||||
```
|
||||
|
||||
> **Note**:
|
||||
- `ref` should be passed as part of url in order to take precedence over `ref`
|
||||
from webhook body that designates the branchref that fired the trigger in the source repository.
|
||||
- `ref` should be url encoded if contains slashes.
|
||||
|
||||
## Pass build variables to a trigger
|
||||
|
||||
You can pass any number of arbitrary variables in the trigger API call and they
|
||||
|
@ -169,6 +185,14 @@ curl --request POST \
|
|||
https://gitlab.example.com/api/v3/projects/9/trigger/builds
|
||||
```
|
||||
|
||||
### Using webhook to trigger builds
|
||||
|
||||
You can add the following webhook to another project in order to trigger a build:
|
||||
|
||||
```
|
||||
https://gitlab.example.com/api/v3/projects/9/ref/master/trigger/builds?token=TOKEN&variables[UPLOAD_TO_S3]=true
|
||||
```
|
||||
|
||||
### Using cron to trigger nightly builds
|
||||
|
||||
Whether you craft a script or just run cURL directly, you can trigger builds
|
||||
|
|
|
@ -12,7 +12,7 @@ module API
|
|||
requires :token, type: String, desc: 'The unique token of trigger'
|
||||
optional :variables, type: Hash, desc: 'The list of variables to be injected into build'
|
||||
end
|
||||
post ":id/trigger/builds" do
|
||||
post ":id/(ref/:ref/)trigger/builds" do
|
||||
project = Project.find_with_namespace(params[:id]) || Project.find_by(id: params[:id])
|
||||
trigger = Ci::Trigger.find_by_token(params[:token].to_s)
|
||||
not_found! unless project && trigger
|
||||
|
|
|
@ -54,6 +54,13 @@ describe API::API do
|
|||
expect(pipeline.builds.size).to eq(5)
|
||||
end
|
||||
|
||||
it 'creates builds on webhook from other gitlab repository and branch' do
|
||||
expect do
|
||||
post api("/projects/#{project.id}/ref/master/trigger/builds?token=#{trigger_token}"), { ref: 'refs/heads/other-branch' }
|
||||
end.to change(project.builds, :count).by(5)
|
||||
expect(response).to have_http_status(201)
|
||||
end
|
||||
|
||||
it 'returns bad request with no builds created if there\'s no commit for that ref' do
|
||||
post api("/projects/#{project.id}/trigger/builds"), options.merge(ref: 'other-branch')
|
||||
expect(response).to have_http_status(400)
|
||||
|
|
Loading…
Reference in New Issue