Class: Danger::Jenkins
Overview
CI Setup
Ah Jenkins, so many memories. So, if you're using Jenkins, you're hosting your own environment.
GitHub
You will want to be using the GitHub pull request builder plugin in order to ensure that you have the build environment set up for PR integration.
With that set up, you can edit your job to add bundle exec danger at the build action.
Pipeline
If your're using pipelines you should be using the GitHub branch source plugin for easy setup and handling of PRs.
After you've set up the plugin, add a sh 'bundle exec danger' line in your pipeline script and make sure that build PRs is enabled.
GitLab
You will want to be using the GitLab Plugin in order to ensure that you have the build environment set up for MR integration.
With that set up, you can edit your job to add bundle exec danger at the build action.
General
People occasionally see issues with Danger not classing your CI runs as a PR, to give you visibility the Jenkins side of Danger expects to see one of these env vars:
- ghprbPullId
- CHANGE_ID
- gitlabMergeRequestIid
- gitlabMergeRequestId
Token Setup
GitHub
As you own the machine, it's up to you to add the environment variable for the DANGER_GITHUB_API_TOKEN.
GitLab
As you own the machine, it's up to you to add the environment variable for the DANGER_GITLAB_API_TOKEN.
Defined Under Namespace
Classes: EnvNotFound
Instance Attribute Summary collapse
-
#project_url ⇒ Object
Returns the value of attribute project_url.
Attributes inherited from CI
#pull_request_id, #repo_slug, #repo_url
Class Method Summary collapse
- .pull_request_id(env) ⇒ Object
- .repo_slug(repo_url) ⇒ Object
- .repo_url(env) ⇒ Object
- .slug_bitbucket(repo_url) ⇒ Object
- .slug_fallback(repo_url) ⇒ Object
- .slug_http(repo_url) ⇒ Object
- .slug_ssh(repo_url) ⇒ Object
- .validates_as_ci?(env) ⇒ Boolean
- .validates_as_pr?(env) ⇒ Boolean
Instance Method Summary collapse
-
#initialize(env) ⇒ Jenkins
constructor
A new instance of Jenkins.
- #supported_request_sources ⇒ Object
Methods inherited from CI
available_ci_sources, inherited, #supports?
Constructor Details
#initialize(env) ⇒ Jenkins
Returns a new instance of Jenkins.
78 79 80 81 82 83 84 85 |
# File 'lib/danger/ci_source/jenkins.rb', line 78 def initialize(env) raise EnvNotFound.new if env.nil? || env.empty? self.repo_url = self.class.repo_url(env) self.pull_request_id = self.class.pull_request_id(env) self.repo_slug = self.class.repo_slug(self.repo_url) self.project_url = env["CI_MERGE_REQUEST_PROJECT_URL"] || env["CI_PROJECT_URL"] end |
Instance Attribute Details
#project_url ⇒ Object
Returns the value of attribute project_url.
52 53 54 |
# File 'lib/danger/ci_source/jenkins.rb', line 52 def project_url @project_url end |
Class Method Details
.pull_request_id(env) ⇒ Object
115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/danger/ci_source/jenkins.rb', line 115 def self.pull_request_id(env) if env["ghprbPullId"] env["ghprbPullId"] elsif env["CHANGE_ID"] env["CHANGE_ID"] elsif env["gitlabMergeRequestIid"] env["gitlabMergeRequestIid"] else env["gitlabMergeRequestId"] end end |
.repo_slug(repo_url) ⇒ Object
87 88 89 90 91 92 93 |
# File 'lib/danger/ci_source/jenkins.rb', line 87 def self.repo_slug(repo_url) slug = self.slug_ssh(repo_url) slug ||= self.slug_http(repo_url) slug ||= self.slug_bitbucket(repo_url) slug ||= self.slug_fallback(repo_url) return slug.gsub(/\.git$/, "") unless slug.nil? end |
.repo_url(env) ⇒ Object
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 |
# File 'lib/danger/ci_source/jenkins.rb', line 127 def self.repo_url(env) if env["GIT_URL_1"] env["GIT_URL_1"] elsif env["CHANGE_URL"] change_url = env["CHANGE_URL"] case change_url when %r{/pull/} # GitHub matches = change_url.match(%r{(.+)/pull/[0-9]+}) matches[1] unless matches.nil? when %r{/merge_requests/} # GitLab matches = change_url.match(%r{(.+?)(/-)?/merge_requests/[0-9]+}) matches[1] unless matches.nil? when %r{/pull-requests/} # Bitbucket matches = change_url.match(%r{(.+)/pull-requests/[0-9]+}) matches[1] unless matches.nil? else change_url end else env["GIT_URL"] end end |
.slug_bitbucket(repo_url) ⇒ Object
95 96 97 98 |
# File 'lib/danger/ci_source/jenkins.rb', line 95 def self.slug_bitbucket(repo_url) repo_matches = repo_url.match(%r{(?:[/:])projects/([^/.]+)/repos/([^/.]+)}) return "#{repo_matches[1]}/#{repo_matches[2]}" if repo_matches end |
.slug_fallback(repo_url) ⇒ Object
110 111 112 113 |
# File 'lib/danger/ci_source/jenkins.rb', line 110 def self.slug_fallback(repo_url) repo_matches = repo_url.match(%r{([/:])([^/]+/[^/]+)$}) return repo_matches[2] end |
.slug_http(repo_url) ⇒ Object
105 106 107 108 |
# File 'lib/danger/ci_source/jenkins.rb', line 105 def self.slug_http(repo_url) repo_matches = repo_url.match(%r{^https?.+(?>\.\w*\d*/)(.+.git$)}) return repo_matches[1] if repo_matches end |
.slug_ssh(repo_url) ⇒ Object
100 101 102 103 |
# File 'lib/danger/ci_source/jenkins.rb', line 100 def self.slug_ssh(repo_url) repo_matches = repo_url.match(/^git@.+:(.+)/) return repo_matches[1] if repo_matches end |
.validates_as_ci?(env) ⇒ Boolean
60 61 62 |
# File 'lib/danger/ci_source/jenkins.rb', line 60 def self.validates_as_ci?(env) env.key? "JENKINS_URL" end |
.validates_as_pr?(env) ⇒ Boolean
64 65 66 67 |
# File 'lib/danger/ci_source/jenkins.rb', line 64 def self.validates_as_pr?(env) id = pull_request_id(env) !id.nil? && !id.empty? && !!id.match(/^\d+$/) end |
Instance Method Details
#supported_request_sources ⇒ Object
69 70 71 72 73 74 75 76 |
# File 'lib/danger/ci_source/jenkins.rb', line 69 def supported_request_sources @supported_request_sources ||= [ Danger::RequestSources::GitHub, Danger::RequestSources::GitLab, Danger::RequestSources::BitbucketServer, Danger::RequestSources::BitbucketCloud ] end |