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.
76 77 78 79 80 81 82 83 |
# File 'lib/danger/ci_source/jenkins.rb', line 76 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.
50 51 52 |
# File 'lib/danger/ci_source/jenkins.rb', line 50 def project_url @project_url end |
Class Method Details
.pull_request_id(env) ⇒ Object
113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/danger/ci_source/jenkins.rb', line 113 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
85 86 87 88 89 90 91 |
# File 'lib/danger/ci_source/jenkins.rb', line 85 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
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
# File 'lib/danger/ci_source/jenkins.rb', line 125 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
93 94 95 96 |
# File 'lib/danger/ci_source/jenkins.rb', line 93 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
108 109 110 111 |
# File 'lib/danger/ci_source/jenkins.rb', line 108 def self.slug_fallback(repo_url) repo_matches = repo_url.match(%r{([/:])([^/]+/[^/]+)$}) return repo_matches[2] end |
.slug_http(repo_url) ⇒ Object
103 104 105 106 |
# File 'lib/danger/ci_source/jenkins.rb', line 103 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
98 99 100 101 |
# File 'lib/danger/ci_source/jenkins.rb', line 98 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
58 59 60 |
# File 'lib/danger/ci_source/jenkins.rb', line 58 def self.validates_as_ci?(env) env.key? "JENKINS_URL" end |
.validates_as_pr?(env) ⇒ Boolean
62 63 64 65 |
# File 'lib/danger/ci_source/jenkins.rb', line 62 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
67 68 69 70 71 72 73 74 |
# File 'lib/danger/ci_source/jenkins.rb', line 67 def supported_request_sources @supported_request_sources ||= [ Danger::RequestSources::GitHub, Danger::RequestSources::GitLab, Danger::RequestSources::BitbucketServer, Danger::RequestSources::BitbucketCloud ] end |