From b6f9b6faba5198616baeae9e41cb238fd2f4f111 Mon Sep 17 00:00:00 2001 From: Sam Liu Date: Tue, 13 Apr 2021 10:18:19 -0700 Subject: [PATCH 1/2] chore: Use BUILD_TAG instead of JENKINS_URL to identify Jenkins env --- samcli/lib/telemetry/cicd.py | 14 ++++++++++++-- tests/unit/lib/telemetry/test_cicd.py | 11 ++++++++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/samcli/lib/telemetry/cicd.py b/samcli/lib/telemetry/cicd.py index 70d3b6e77a..622e483ece 100644 --- a/samcli/lib/telemetry/cicd.py +++ b/samcli/lib/telemetry/cicd.py @@ -46,9 +46,19 @@ def _is_codeship(environ: Mapping) -> bool: return ci_name == "codeship" +def _is_jenkins(environ: Mapping) -> bool: + """ + Use environ to determine whether it is running in Jenkins. + According to the doc, + https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#working-with-your-jenkinsfile + > BUILD_TAG + > String of jenkins-${JOB_NAME}-${BUILD_NUMBER}. + """ + return bool(environ.get("BUILD_TAG", "").startswith("jenkins-")) + + _ENV_VAR_OR_CALLABLE_BY_PLATFORM: Dict[CICDPlatform, Union[str, Callable[[Mapping], bool]]] = { - # https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#using-environment-variables - CICDPlatform.Jenkins: "JENKINS_URL", + CICDPlatform.Jenkins: _is_jenkins, # https://docs.gitlab.com/ee/ci/variables/predefined_variables.html CICDPlatform.GitLab: "GITLAB_CI", # https://docs.github.com/en/actions/reference/environment-variables diff --git a/tests/unit/lib/telemetry/test_cicd.py b/tests/unit/lib/telemetry/test_cicd.py index b380beb969..8d2b79831a 100644 --- a/tests/unit/lib/telemetry/test_cicd.py +++ b/tests/unit/lib/telemetry/test_cicd.py @@ -9,7 +9,7 @@ class TestCICD(TestCase): @parameterized.expand( [ - (CICDPlatform.Jenkins, "JENKINS_URL", Mock()), + (CICDPlatform.Jenkins, "BUILD_TAG", "jenkins-jobname-123"), (CICDPlatform.GitLab, "GITLAB_CI", Mock()), (CICDPlatform.GitHubAction, "GITHUB_ACTION", Mock()), (CICDPlatform.TravisCI, "TRAVIS", Mock()), @@ -26,3 +26,12 @@ class TestCICD(TestCase): ) def test_is_cicd_platform(self, cicd_platform, env_var, env_var_value): self.assertTrue(_is_cicd_platform(cicd_platform, {env_var: env_var_value})) + + @parameterized.expand( + [ + (CICDPlatform.Jenkins, "BUILD_TAG", "not-jenkins-"), + (CICDPlatform.CodeShip, "CI_NAME", "not-CodeShip"), + ] + ) + def test_is_not_cicd_platform(self, cicd_platform, env_var, env_var_value): + self.assertFalse(_is_cicd_platform(cicd_platform, {env_var: env_var_value})) From bbfeaff33da76c626b656ffab02a58a9286e5e95 Mon Sep 17 00:00:00 2001 From: Sam Liu Date: Tue, 13 Apr 2021 16:28:47 -0700 Subject: [PATCH 2/2] Keep JENKINS_URL --- samcli/lib/telemetry/cicd.py | 8 +++++++- tests/unit/lib/telemetry/test_cicd.py | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/samcli/lib/telemetry/cicd.py b/samcli/lib/telemetry/cicd.py index 622e483ece..a65aa7b0ad 100644 --- a/samcli/lib/telemetry/cicd.py +++ b/samcli/lib/telemetry/cicd.py @@ -53,8 +53,14 @@ def _is_jenkins(environ: Mapping) -> bool: https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#working-with-your-jenkinsfile > BUILD_TAG > String of jenkins-${JOB_NAME}-${BUILD_NUMBER}. + > ... + > JENKINS_URL + > Full URL of Jenkins, such as https://example.com:port/jenkins/ + > (NOTE: only available if Jenkins URL set in "System Configuration") + + Here firstly check JENKINS_URL's presence, if not, then fallback to check BUILD_TAG starts with "jenkins" """ - return bool(environ.get("BUILD_TAG", "").startswith("jenkins-")) + return "JENKINS_URL" in environ or environ.get("BUILD_TAG", "").startswith("jenkins-") _ENV_VAR_OR_CALLABLE_BY_PLATFORM: Dict[CICDPlatform, Union[str, Callable[[Mapping], bool]]] = { diff --git a/tests/unit/lib/telemetry/test_cicd.py b/tests/unit/lib/telemetry/test_cicd.py index 8d2b79831a..382076bbcd 100644 --- a/tests/unit/lib/telemetry/test_cicd.py +++ b/tests/unit/lib/telemetry/test_cicd.py @@ -10,6 +10,7 @@ class TestCICD(TestCase): @parameterized.expand( [ (CICDPlatform.Jenkins, "BUILD_TAG", "jenkins-jobname-123"), + (CICDPlatform.Jenkins, "JENKINS_URL", Mock()), (CICDPlatform.GitLab, "GITLAB_CI", Mock()), (CICDPlatform.GitHubAction, "GITHUB_ACTION", Mock()), (CICDPlatform.TravisCI, "TRAVIS", Mock()),