Add job_test_trigger_automation.py 19/136519/2
authorYonghee Han <onstudy@samsung.com>
Fri, 30 Jun 2017 05:34:06 +0000 (14:34 +0900)
committerYonghee Han <onstudy@samsung.com>
Wed, 5 Jul 2017 05:59:05 +0000 (14:59 +0900)
migration of TRBS_TEST_AUTOMATION job
 local trigger for tester
 public trigger for tester

Change-Id: Ic4ac77bcd5a3d3a75bf784e1db18dd2f5736ffee

debian/jenkins-scripts.install
job_test_trigger_automation.py [new file with mode: 0755]
packaging/jenkins-scripts.spec

index 954d2df..c55bb52 100644 (file)
@@ -34,4 +34,4 @@ debian/tmp/job_trigger_for_sync_repo.py /var/lib/jenkins/jenkins-scripts/
 debian/tmp/job_trigger_obs_sync.py /var/lib/jenkins/jenkins-scripts/
 debian/tmp/job_update_public_git.py /var/lib/jenkins/jenkins-scripts/
 debian/tmp/job_control_ondemand_slaves.groovy /var/lib/jenkins/jenkins-scripts/
-
+debian/tmp/job_test_trigger_automation.py /var/lib/jenkins/jenkins-scripts/
diff --git a/job_test_trigger_automation.py b/job_test_trigger_automation.py
new file mode 100755 (executable)
index 0000000..39daee7
--- /dev/null
@@ -0,0 +1,193 @@
+#!/usr/bin/env python
+#
+# Copyright (C) 2010, 2011, 2012, 2013, 2014 Intel, Inc.
+#
+#    This program is free software; you can redistribute it and/or
+#    modify it under the terms of the GNU General Public License
+#    as published by the Free Software Foundation; version 2
+#    of the License.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU General Public License for more details.
+#
+#    You should have received a copy of the GNU General Public License
+#    along with this program; if not, write to the Free Software
+#    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+"""This script is used to update infomation about images"""
+
+import os
+import sys
+import base64
+import json
+
+
+from common.gerrit import get_gerrit_event, GerritEnv
+from common.git import Git, clone_gitproject
+from common.buildtrigger import trigger_next, trigger_info, trigger_jenkins_build, remote_jenkins_build_job
+
+GIT_FILE_NAME = 'prerelease.description'
+
+
+def local_trigger_for_tester(events, gerrit_env):
+    """ trigger local tester """
+
+    print 'localtrigger_for_tester\n'
+
+    if os.getenv('TRIGGER_INFO'):
+        content = trigger_info(os.getenv('TRIGGER_INFO'))
+
+        # Check if we've got required field in TRIGGER_INFO
+        for field in ('git_tag', 'download_url', 'projects', 'obs_target_prj'):
+            if field not in content:
+                print 'Error: TRIGGER_INFO doesn\'t contain %s' % field
+                return -1
+
+        # trigger sync obs job
+        trigger_jenkins_build(os.getenv('TEST_JOB_NAME'), \
+                             {'TRIGGER_INFO': os.getenv('TRIGGER_INFO')}, \
+                              cred={'url': os.getenv('TEST_JENKINS_URL'), \
+                              'username': os.getenv('TEST_JENKINS_USER'), \
+                              'password': os.getenv('TEST_JENKINS_PW')}, \
+                              block=False
+                             )
+    else:
+
+        git_prjdir = os.path.join(gerrit_env.gitcache, events['project'])
+
+        # clone_gitproject
+        if not clone_gitproject(events['project'], \
+                                git_prjdir,
+                                gerrit_hostname=gerrit_env.hostname, \
+                                gerrit_username=gerrit_env.username, \
+                                gerrit_sshport=gerrit_env.sshport):
+           print >> sys.stderr, 'Error cloning %s' % event['project']
+           return 1
+
+        # get prerelease_description_dict data
+        mygit = Git(git_prjdir)
+        commit_id = os.getenv("GERRIT_NEWREV")
+        arg = commit_id + ':' + GIT_FILE_NAME
+
+        prerelease_description_str = mygit.show(arg)
+        prerelease_description_dict = json.loads(prerelease_description_str)
+        print json.dumps(prerelease_description_dict, indent=4)
+
+        # set the jenkins info
+        refname = os.getenv("GERRIT_REFNAME")
+        print 'refname : %s\n' % refname
+        if refname == 'tizen_3.0_fhub3.0':
+            url_lst = os.getenv("TEST_JENKINS_URL", "").split(',')
+            user_lst = os.getenv("TEST_JENKINS_USER", "").split(',')
+            token_lst = os.getenv("TEST_JENKINS_PW", "").split(',')
+            name_lst = os.getenv("TEST_FHUB3.0_JOB_NAME", "").split(',')
+        else:
+            print 'In case of %s branch, do nothing!!\n' % refname
+            return
+
+        # remote trigger by using file param
+        files_dict = {}
+        for each_url, each_user, each_token, each_name in \
+            zip(url_lst, user_lst, token_lst, name_lst):
+            fname = 'TRIGGER_INFO_FILE_' + each_name
+            with open(fname, 'w') as f:
+                f.write(base64.b64encode(json.dumps(prerelease_description_dict)))
+
+            files_dict[each_name] = [(fname, fname)]
+            remote_jenkins_build_job(each_url, each_user, each_token, each_name,
+                                     None, None, files_dict[each_name])
+
+    return
+
+def public_trigger_for_tester(events, gerrit_env):
+    """ trigger public tester """
+
+    print 'publictrigger_for_tester\n'
+
+    git_prjdir = os.path.join(gerrit_env.gitcache, events['project'])
+
+    # clone_gitproject
+    if not clone_gitproject(events['project'], \
+                            git_prjdir,
+                            gerrit_hostname=gerrit_env.hostname, \
+                            gerrit_username=gerrit_env.username, \
+                            gerrit_sshport=gerrit_env.sshport):
+       print >> sys.stderr, 'Error cloning %s' % event['project']
+       return 1
+
+    # get prerelease_description_dict data
+    mygit = Git(git_prjdir)
+    commit_id = os.getenv("GERRIT_NEWREV")
+    arg = commit_id + ':' + GIT_FILE_NAME
+
+    prerelease_description_str = mygit.show(arg)
+    prerelease_description_dict = json.loads(prerelease_description_str)
+    print json.dumps(prerelease_description_dict, indent=4)
+
+    # set the jenkins info
+    refname = os.getenv("GERRIT_REFNAME")
+    print 'refname : %s\n' % refname
+    if refname == 'tizen_3.0':
+        url_lst = os.getenv("TEST_JENKINS_URL").split(',')
+        user_lst = os.getenv("TEST_JENKINS_USER").split(',')
+        token_lst = os.getenv("TEST_JENKINS_PW").split(',')
+        name_lst = os.getenv("TEST_JOB_NAME").split(',')
+    elif refname == 'tizen':
+        url_lst = os.getenv("PUBLIC_TEST_JENKINS_URL").split(',')
+        user_lst = os.getenv("PUBLIC_TEST_JENKINS_USER").split(',')
+        token_lst = os.getenv("PUBLIC_TEST_JENKINS_API_TOKEN").split(',')
+        name_lst = os.getenv("PUBLIC_TEST_JENKINS_JOB_NAME").split(',')
+    else:
+        print 'In case of %s branch, do nothing!!\n' % refname
+        return
+
+    # remote trigger by using file param
+    files_dict = {}
+    for each_url, each_user, each_token, each_name in \
+        zip(url_lst, user_lst, token_lst, name_lst):
+        #print 'each_url(%s), each_user(%s), each_token(%s), each_name(%s)\n' \
+        #      % (each_url, each_user, each_token, each_name)
+        fname = 'TRIGGER_INFO_FILE_' + each_name
+
+        with open(fname, 'w') as f:
+            f.write(base64.b64encode(json.dumps(prerelease_description_dict)))
+
+        files_dict[each_name] = [(fname, fname)]
+
+        remote_jenkins_build_job(each_url, each_user, each_token, each_name,
+                                None, None, files_dict[each_name])
+
+def main():
+    """The main body"""
+
+    # get gerrit event
+    events = get_gerrit_event()
+    if events['host'] == os.getenv('GERRIT_HOSTNAME'):
+        if os.getenv("TEST_AUTOMATION_ENABLED", "0") == "1":
+            local_trigger_for_tester(events, GerritEnv(""))
+    elif events['host'] == os.getenv('PUBLIC_GERRIT_HOSTNAME'):
+        # check the envs
+        if not os.getenv("PUBLIC_GIT_CACHE_DIR") or \
+           not os.getenv("GERRIT_NEWREV") or \
+           not os.getenv("PUBLIC_TEST_AUTOMATION_ENABLED") or \
+           not os.getenv("PUBLIC_TEST_JENKINS_URL") or \
+           not os.getenv("PUBLIC_TEST_JENKINS_USER") or \
+           not os.getenv("PUBLIC_TEST_JENKINS_API_TOKEN") or \
+           not os.getenv("PUBLIC_TEST_JENKINS_JOB_NAME"):
+           print 'need to check envs!!\n'
+           return
+
+        if os.getenv("PUBLIC_TEST_AUTOMATION_ENABLED", "0") == "1":
+            public_trigger_for_tester(get_gerrit_event('PUBLIC_'),
+                                     GerritEnv('PUBLIC_')
+                                    )
+    else:
+        print 'need to check envs!!\n'
+        return
+
+    return
+
+if __name__ == "__main__":
+    sys.exit(main())
index bde815c..0a8e5fb 100644 (file)
@@ -162,6 +162,7 @@ fi
 %{destdir}/job_trigger_obs_sync.py
 %{destdir}/job_update_public_git.py
 %{destdir}/job_control_ondemand_slaves.groovy
+%{destdir}/job_test_trigger_automation.py
 
 %files common
 %defattr(-,jenkins,jenkins)