Show More
1 | NO CONTENT: new file 100644, binary diff hidden |
|
NO CONTENT: new file 100644, binary diff hidden |
1 | NO CONTENT: new file 100644, binary diff hidden |
|
NO CONTENT: new file 100644, binary diff hidden |
1 | NO CONTENT: new file 100644, binary diff hidden |
|
NO CONTENT: new file 100644, binary diff hidden |
1 | NO CONTENT: new file 100644, binary diff hidden |
|
NO CONTENT: new file 100644, binary diff hidden |
1 | NO CONTENT: new file 100644, binary diff hidden |
|
NO CONTENT: new file 100644, binary diff hidden |
@@ -0,0 +1,113 b'' | |||||
|
1 | .. _integrations-jenkins: | |||
|
2 | ||||
|
3 | Jenkins integration | |||
|
4 | =================== | |||
|
5 | ||||
|
6 | .. important:: | |||
|
7 | ||||
|
8 | Jenkins integration is only available in |RCEE|. | |||
|
9 | ||||
|
10 | ||||
|
11 | ||||
|
12 | Below are few examples how to use dedicated Jenkins integrations with |RCEE|. | |||
|
13 | ||||
|
14 | ||||
|
15 | ||||
|
16 | Configure Jenkins to check each commit after push | |||
|
17 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |||
|
18 | ||||
|
19 | In order to configure Jenkins to trigger a build on a project after each push we | |||
|
20 | need to create a project that will allow triggering a build from external sources. | |||
|
21 | ||||
|
22 | In Jenkins, check `Trigger builds remotely (e.g., from scripts)` option. This gives | |||
|
23 | now ability to trigger builds using an URL. | |||
|
24 | ||||
|
25 | .. image:: ../images/jenkins-build-with-parameters.png | |||
|
26 | ||||
|
27 | We also need to specify the parameters we're going to build the project with. | |||
|
28 | In this example we'll use build with 3 parameters `COMMIT_ID`, `BRANCH_HEAD` and `BRANCH`. | |||
|
29 | In Jenkins we need to add those 3 parameters, and check an option | |||
|
30 | `This project is parameterised` | |||
|
31 | ||||
|
32 | .. image:: ../images/jenkins-adding-build-parameters.png | |||
|
33 | ||||
|
34 | ||||
|
35 | Our final URL that |RCEE| Jenkins integration would use could look like this: | |||
|
36 | ||||
|
37 | This URL will be triggered for each pushed branch, and will include the branch head commit id. | |||
|
38 | ||||
|
39 | https://jenkins.server.com/job/test-build-commits/buildWithParameters?token=secret&BRANCH=${branch}&BRANCH_HEAD=${branch_head} | |||
|
40 | ||||
|
41 | Or we can also use commit_id in this case URL will be triggered for each pushed commit in the branch, and will include the commit id. | |||
|
42 | ||||
|
43 | https://jenkins.server.com/job/test-build-commits/buildWithParameters?token=secret&BRANCH=${branch}&COMMIT_ID=${commit_id} | |||
|
44 | ||||
|
45 | ||||
|
46 | Now we have all the required information to fetch/checkout and test our project. | |||
|
47 | We can write an example build common in Jenkins. | |||
|
48 | ||||
|
49 | ||||
|
50 | .. image:: ../images/jenkins-build-command.png | |||
|
51 | ||||
|
52 | ||||
|
53 | Below is an example of the integration page we used on |RCEE| side. | |||
|
54 | ||||
|
55 | ||||
|
56 | .. image:: ../images/rhodecode-jenkins-integration-settings.png | |||
|
57 | ||||
|
58 | ||||
|
59 | ||||
|
60 | Configure Jenkins to check each pull-request on creation and updates | |||
|
61 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |||
|
62 | ||||
|
63 | Jenkins integration also allows checking created pull-requests inside |RCCE|. This is | |||
|
64 | somehow a special case compared to testing commits. The pull-requests cannot be cloned | |||
|
65 | from the repository. Instead |RCCE| exposes different links back to CI systems which | |||
|
66 | store information on how to obtain the pull-request code. | |||
|
67 | ||||
|
68 | On |RCCE| side we need to create a new integration that would use only two events: | |||
|
69 | ||||
|
70 | - pullrequest created | |||
|
71 | - pullrequest commits updated | |||
|
72 | ||||
|
73 | This will trigger the builds when pull-request is firstly created, and then each time | |||
|
74 | pull-requests is updated and commits that it stores change. | |||
|
75 | ||||
|
76 | ||||
|
77 | In Jenkins, we should create at least two new build string parameters. | |||
|
78 | We could use `PR_ID` and `SHADOW_URL`. | |||
|
79 | Using those parameters, we can then create a customized build command to checkout a | |||
|
80 | merged state of pull-request. And later on using rhodecode-api notify about the checks | |||
|
81 | using the `PR_ID`. | |||
|
82 | ||||
|
83 | ||||
|
84 | .. image:: ../images/jenkins-pr-build-command.png | |||
|
85 | ||||
|
86 | ||||
|
87 | There's even a helper script we created to send notifications. | |||
|
88 | Here's how the build on success could look like in Jenkins. | |||
|
89 | ||||
|
90 | .. code-block:: bash | |||
|
91 | ||||
|
92 | # clone the ci-notify script, and save it into our $BUILD_TAG/notify directory | |||
|
93 | hg clone https://code.rhodecode.com/ci-notify $BUILD_TAG/notify | |||
|
94 | ||||
|
95 | # execute the script. $RC_TOKEN is auth-token for API | |||
|
96 | # url is your rhodecode instance, repoid is repository project which PR was opened | |||
|
97 | # status could be "approved" or "rejected" | |||
|
98 | python $BUILD_TAG/notify/notify.py \ | |||
|
99 | --token $RC_TOKEN \ | |||
|
100 | --url https://code.server.com \ | |||
|
101 | --repoid my-example-project \ | |||
|
102 | --prid $PR_ID \ | |||
|
103 | --status "approved" \ | |||
|
104 | --message "Build Succeeded: $BUILD_URL" | |||
|
105 | ||||
|
106 | ||||
|
107 | Below is also an example that we could use on |RCCE| side in the Jenkins integration settings. | |||
|
108 | A Jenkins Trigger url that exposes all required information back to Jenkins CI server: | |||
|
109 | ||||
|
110 | .. code-block:: bash | |||
|
111 | ||||
|
112 | http://jenkins.server.com/job/my-project-pull-request-tests/buildWithParameters?token=secret&PR_ID=${pull_request_id}&PR_TITLE=${pull_request_title}&SHADOW_URL=${pull_request_shadow_url}&PR_UID=${pull_request_commits_uid} | |||
|
113 |
@@ -0,0 +1,47 b'' | |||||
|
1 | |RCE| 4.12.4 |RNS| | |||
|
2 | ------------------ | |||
|
3 | ||||
|
4 | Release Date | |||
|
5 | ^^^^^^^^^^^^ | |||
|
6 | ||||
|
7 | - 2018-07-13 | |||
|
8 | ||||
|
9 | ||||
|
10 | New Features | |||
|
11 | ^^^^^^^^^^^^ | |||
|
12 | ||||
|
13 | ||||
|
14 | ||||
|
15 | General | |||
|
16 | ^^^^^^^ | |||
|
17 | ||||
|
18 | ||||
|
19 | ||||
|
20 | Security | |||
|
21 | ^^^^^^^^ | |||
|
22 | ||||
|
23 | ||||
|
24 | ||||
|
25 | Performance | |||
|
26 | ^^^^^^^^^^^ | |||
|
27 | ||||
|
28 | ||||
|
29 | ||||
|
30 | Fixes | |||
|
31 | ^^^^^ | |||
|
32 | ||||
|
33 | - Repository: fixed problems with mercurial/git url validators. | |||
|
34 | - User Groups: fixed audit log data on user group permissions view. | |||
|
35 | This caused an 500 error when editing user groups. | |||
|
36 | - Authentication: fixed problem with displaying social auth providers in the login page. | |||
|
37 | - Google Authentication: updated google user info api to latest version. The previous | |||
|
38 | endpoint was deprecated and it caused problems with Google authentication. | |||
|
39 | - API: fixed problem with setting recursive permissions changes to repo group. | |||
|
40 | - API: fixed problem with creation of pull request with custom reviewers rules. | |||
|
41 | - API: fixed problem with proper diff calculation with using pull-request API. | |||
|
42 | ||||
|
43 | ||||
|
44 | Upgrade notes | |||
|
45 | ^^^^^^^^^^^^^ | |||
|
46 | ||||
|
47 | - Scheduled release addressing reported problems, and improving stability. |
@@ -39,3 +39,4 b' b5b30547d90d2e088472a70c84878f429ffbf40d' | |||||
39 | 9072253aa8894d20c00b4a43dc61c2168c1eff94 v4.12.1 |
|
39 | 9072253aa8894d20c00b4a43dc61c2168c1eff94 v4.12.1 | |
40 | 6a517543ea9ef9987d74371bd2a315eb0b232dc9 v4.12.2 |
|
40 | 6a517543ea9ef9987d74371bd2a315eb0b232dc9 v4.12.2 | |
41 | 7fc0731b024c3114be87865eda7ab621cc957e32 v4.12.3 |
|
41 | 7fc0731b024c3114be87865eda7ab621cc957e32 v4.12.3 | |
|
42 | 6d531c0b068c6eda62dddceedc9f845ecb6feb6f v4.12.4 |
@@ -16,7 +16,7 b' General Webhook' | |||||
16 | +++++++++++++++ |
|
16 | +++++++++++++++ | |
17 |
|
17 | |||
18 | :ref:`integrations-webhook` allows sending a JSON payload information to specified |
|
18 | :ref:`integrations-webhook` allows sending a JSON payload information to specified | |
19 |
|
|
19 | custom URL with GET or POST methods. There are several variables that could be used | |
20 | in the URL greatly extending the flexibility of this type of integration. |
|
20 | in the URL greatly extending the flexibility of this type of integration. | |
21 |
|
21 | |||
22 | Most of the modern CI systems such as Jenkins, TeamCity, Bamboo or CircleCi |
|
22 | Most of the modern CI systems such as Jenkins, TeamCity, Bamboo or CircleCi | |
@@ -50,7 +50,7 b' the url would look like that::' | |||||
50 |
|
50 | |||
51 | Please note that some variables will result in multiple calls. |
|
51 | Please note that some variables will result in multiple calls. | |
52 | e.g. for |HG| specifying `${branch}` will trigger as many builds as how |
|
52 | e.g. for |HG| specifying `${branch}` will trigger as many builds as how | |
53 |
many branches the |
|
53 | many branches the user actually pushed. Same applies to `${commit_id}` | |
54 | This will trigger many builds if many commits are pushed. This allows |
|
54 | This will trigger many builds if many commits are pushed. This allows | |
55 | triggering individual builds for each pushed commit. |
|
55 | triggering individual builds for each pushed commit. | |
56 |
|
56 | |||
@@ -66,6 +66,9 b' calling such example url provided in :re' | |||||
66 |
|
66 | |||
67 | http://server/job/${project_id}/build-branch-${branch}/buildWithParameters?token=TOKEN&PARAMETER=value&PARAMETER2=value2 |
|
67 | http://server/job/${project_id}/build-branch-${branch}/buildWithParameters?token=TOKEN&PARAMETER=value&PARAMETER2=value2 | |
68 |
|
68 | |||
|
69 | The |RCEE| includes a custom :ref:`integrations-jenkins` integration. That allows using some | |||
|
70 | of Jenkins added security features. Please check also the above link for more examples. | |||
|
71 | ||||
69 |
|
72 | |||
70 | Team City |
|
73 | Team City | |
71 | +++++++++ |
|
74 | +++++++++ |
@@ -19,7 +19,8 b' Type/Name |RC| Edi' | |||||
19 | :ref:`integrations-webhook` |RCCEshort| POST events as `json` to a custom url |
|
19 | :ref:`integrations-webhook` |RCCEshort| POST events as `json` to a custom url | |
20 | :ref:`integrations-ci` |RCCEshort| Trigger Builds for Common CI Systems |
|
20 | :ref:`integrations-ci` |RCCEshort| Trigger Builds for Common CI Systems | |
21 | :ref:`integrations-email` |RCCEshort| Send repo push commits by email |
|
21 | :ref:`integrations-email` |RCCEshort| Send repo push commits by email | |
22 |
:ref:`integrations- |
|
22 | :ref:`integrations-jenkins` |RCEEshort| Trigger Builds for Jenkins CI System | |
|
23 | :ref:`integrations-redmine` |RCEEshort| Close/Resolve/Reference Redmine issues | |||
23 | :ref:`integrations-jira` |RCEEshort| Close/Resolve/Reference JIRA issues |
|
24 | :ref:`integrations-jira` |RCEEshort| Close/Resolve/Reference JIRA issues | |
24 | ============================ ============ ===================================== |
|
25 | ============================ ============ ===================================== | |
25 |
|
26 | |||
@@ -53,3 +54,4 b' See pages specific to each type of integ' | |||||
53 | webhook |
|
54 | webhook | |
54 |
|
55 | |||
55 | ci |
|
56 | ci | |
|
57 | jenkins |
@@ -9,6 +9,7 b' Release Notes' | |||||
9 | .. toctree:: |
|
9 | .. toctree:: | |
10 | :maxdepth: 1 |
|
10 | :maxdepth: 1 | |
11 |
|
11 | |||
|
12 | release-notes-4.12.4.rst | |||
12 | release-notes-4.12.3.rst |
|
13 | release-notes-4.12.3.rst | |
13 | release-notes-4.12.2.rst |
|
14 | release-notes-4.12.2.rst | |
14 | release-notes-4.12.1.rst |
|
15 | release-notes-4.12.1.rst |
@@ -124,6 +124,7 b' class EEIntegration(IntegrationTypeBase)' | |||||
124 |
|
124 | |||
125 |
|
125 | |||
126 | # Helpers # |
|
126 | # Helpers # | |
|
127 | # updating this required to update the `common_vars` as well. | |||
127 | WEBHOOK_URL_VARS = [ |
|
128 | WEBHOOK_URL_VARS = [ | |
128 | ('event_name', 'Unique name of the event type, e.g pullrequest-update'), |
|
129 | ('event_name', 'Unique name of the event type, e.g pullrequest-update'), | |
129 | ('repo_name', 'Full name of the repository'), |
|
130 | ('repo_name', 'Full name of the repository'), | |
@@ -134,8 +135,9 b' WEBHOOK_URL_VARS = [' | |||||
134 | ('extra:<extra_key_name>', 'Extra repo variables, read from its settings.'), |
|
135 | ('extra:<extra_key_name>', 'Extra repo variables, read from its settings.'), | |
135 |
|
136 | |||
136 | # special attrs below that we handle, using multi-call |
|
137 | # special attrs below that we handle, using multi-call | |
137 | ('branch', 'Name of each brach submitted, if any.'), |
|
138 | ('branch', 'Name of each branch submitted, if any.'), | |
138 | ('commit_id', 'Id of each commit submitted, if any.'), |
|
139 | ('branch_head', 'Head ID of pushed branch (full sha of last commit), if any.'), | |
|
140 | ('commit_id', 'ID (full sha) of each commit submitted, if any.'), | |||
139 |
|
141 | |||
140 | # pr events vars |
|
142 | # pr events vars | |
141 | ('pull_request_id', 'Unique ID of the pull request.'), |
|
143 | ('pull_request_id', 'Unique ID of the pull request.'), | |
@@ -173,11 +175,13 b' class CommitParsingDataHandler(object):' | |||||
173 | _branch = branch_data[commit_branch] \ |
|
175 | _branch = branch_data[commit_branch] \ | |
174 | if commit_branch else commit_branch |
|
176 | if commit_branch else commit_branch | |
175 | branch_commits = {'branch': _branch, |
|
177 | branch_commits = {'branch': _branch, | |
|
178 | 'branch_head': '', | |||
176 | 'commits': []} |
|
179 | 'commits': []} | |
177 | branches_commits[commit_branch] = branch_commits |
|
180 | branches_commits[commit_branch] = branch_commits | |
178 |
|
181 | |||
179 | branch_commits = branches_commits[commit_branch] |
|
182 | branch_commits = branches_commits[commit_branch] | |
180 | branch_commits['commits'].append(commit) |
|
183 | branch_commits['commits'].append(commit) | |
|
184 | branch_commits['branch_head'] = commit['raw_id'] | |||
181 | return branches_commits |
|
185 | return branches_commits | |
182 |
|
186 | |||
183 |
|
187 | |||
@@ -218,10 +222,17 b' class WebhookDataHandler(CommitParsingDa' | |||||
218 |
|
222 | |||
219 | branches_commits = self.aggregate_branch_data( |
|
223 | branches_commits = self.aggregate_branch_data( | |
220 | data['push']['branches'], data['push']['commits']) |
|
224 | data['push']['branches'], data['push']['commits']) | |
221 | if '${branch}' in url: |
|
225 | if '${branch}' in url or '${branch_head}' in url: | |
222 | # call it multiple times, for each branch if used in variables |
|
226 | # call it multiple times, for each branch if used in variables | |
223 | for branch, commit_ids in branches_commits.items(): |
|
227 | for branch, commit_ids in branches_commits.items(): | |
224 | branch_url = string.Template(url).safe_substitute(branch=branch) |
|
228 | branch_url = string.Template(url).safe_substitute(branch=branch) | |
|
229 | ||||
|
230 | if '${branch_head}' in branch_url: | |||
|
231 | # last commit in the aggregate is the head of the branch | |||
|
232 | branch_head = commit_ids['branch_head'] | |||
|
233 | branch_url = string.Template(branch_url).safe_substitute( | |||
|
234 | branch_head=branch_head) | |||
|
235 | ||||
225 | # call further down for each commit if used |
|
236 | # call further down for each commit if used | |
226 | if '${commit_id}' in branch_url: |
|
237 | if '${commit_id}' in branch_url: | |
227 | for commit_data in commit_ids['commits']: |
|
238 | for commit_data in commit_ids['commits']: |
General Comments 0
You need to be logged in to leave comments.
Login now