diff --git "a/tools/oepkgs-check-rpmbuild/doc/oepkgs\351\227\250\347\246\201\350\277\201\347\247\273\350\256\276\350\256\241.md" "b/tools/oepkgs-check-rpmbuild/doc/oepkgs\351\227\250\347\246\201\350\277\201\347\247\273\350\256\276\350\256\241.md" new file mode 100644 index 0000000000000000000000000000000000000000..a692e465cb2a6dcfd601a287d21f3b6186dbfdd1 --- /dev/null +++ "b/tools/oepkgs-check-rpmbuild/doc/oepkgs\351\227\250\347\246\201\350\277\201\347\247\273\350\256\276\350\256\241.md" @@ -0,0 +1,62 @@ +### oepkgs门禁迁移 + +#### 背景概述 + +##### 问题背景与分析 + +oepkgs门禁构建检查不稳定,出现机器资源问题、compass-ci服务问题等,无法得到正确结果。由此导致了用户引入oepkgs软件包无法获取正确的构建结果反馈。 + +oepkgs门禁存在的问题包括偶发性的问题如网络问题;自动化构建流程无法成功如需要root权限构建、需要大规格机器构建;pr合入后未成功引入软件包,这可能是偶发因素导致,如网络问题,可能是compass-ci服务出了问题;compass-ci自身存在的问题,如机器资源问题、测试结果写入数据库失败的问题等等。 + +分析问题原因: + +1、该oepkgs门禁构建检查服务在本地服务器z9用compass-ci实现,不稳定 + +2、compass-ci自身存在的问题导致服务经常出问题,如机器资源问题、测试结果写入数据库失败 + +##### 解决方案 + +希望使用oepkgs网站实现oepkgs门禁rpm构建检查。 + +希望调用软件所的oepkgs网站的api接口实现oepkgs门禁构建检查,增强门禁稳定性,实现与现有的compass-ci门禁测试的双重保障。 + +![1](../image/1.png) + +#### 设计概述 + +##### 整体方案设计 + +![2](../image/2.png) + +首先,通过gitee提交pr或评论/retest,jenkins webhook触发,调用oepkgs网站接口进行构建,构建成功后调用oepkgs网站接口获取构建结果,最后由ci-robot在pr评论返回构建结果。 + +##### 流程设计 + +![3](../image/3.png) + +具体流程设计: + +① get_oepkgs_token获取token + +② create_job创建构建任务 + +③ build_job开始构建 + +④ get_build_record获取构建结果 + +⑤ comment_pr进行评论 + +#### 功能设计 + +希望设计实现的功能: + +① 将构建结果返回到pr评论中 + +![4](../image/4.png) + +② oepkgs网站自动进行rpm构建 + +![5](../image/5.png) + +最后实现oepkgs门禁使用oepkgs网站提供的rpmbuild接口进行构建测试并将结果返回到pr评论的功能,实现与原有的compass-ci门禁测试的双重保障。 + diff --git a/tools/oepkgs-check-rpmbuild/image/1.png b/tools/oepkgs-check-rpmbuild/image/1.png new file mode 100644 index 0000000000000000000000000000000000000000..bd8e8c2659aff5aed8a81e5cdac3de3e9db31386 Binary files /dev/null and b/tools/oepkgs-check-rpmbuild/image/1.png differ diff --git a/tools/oepkgs-check-rpmbuild/image/2.png b/tools/oepkgs-check-rpmbuild/image/2.png new file mode 100644 index 0000000000000000000000000000000000000000..6885c206f5e3fa96a545bb4e5bcc8c6f84562492 Binary files /dev/null and b/tools/oepkgs-check-rpmbuild/image/2.png differ diff --git a/tools/oepkgs-check-rpmbuild/image/3.png b/tools/oepkgs-check-rpmbuild/image/3.png new file mode 100644 index 0000000000000000000000000000000000000000..0db3edd191d2674840f2b7e0cf289e11e8ebdb36 Binary files /dev/null and b/tools/oepkgs-check-rpmbuild/image/3.png differ diff --git a/tools/oepkgs-check-rpmbuild/image/4.png b/tools/oepkgs-check-rpmbuild/image/4.png new file mode 100644 index 0000000000000000000000000000000000000000..dc7bb7b9c0fb3171858cc2429c74b83c55936deb Binary files /dev/null and b/tools/oepkgs-check-rpmbuild/image/4.png differ diff --git a/tools/oepkgs-check-rpmbuild/image/5.png b/tools/oepkgs-check-rpmbuild/image/5.png new file mode 100644 index 0000000000000000000000000000000000000000..6d9fc64edc7981a9a7ff64589ccfd11f2c554502 Binary files /dev/null and b/tools/oepkgs-check-rpmbuild/image/5.png differ diff --git a/tools/oepkgs-check-rpmbuild/src/build_job.py b/tools/oepkgs-check-rpmbuild/src/build_job.py new file mode 100644 index 0000000000000000000000000000000000000000..45381c527cf9d110241eeb642cdb1c810f5104bb --- /dev/null +++ b/tools/oepkgs-check-rpmbuild/src/build_job.py @@ -0,0 +1,46 @@ +import requests + + +def build_job(opekgstoken, jobname, jobid): + """ + start to build job in oepkgs.net + :param opekgstoken: the login token of the account oepkgs_management + :param jobid: the id of the job + :param jobname: the name of the job + :return: + whether successfully build the job + """ + url2 = 'https://build.dev.oepkgs.net/api/build/task/buildJob' + headers2 = { + 'authority': 'build.dev.oepkgs.net', + 'accept': '*/*', + 'accept-language': 'en-US,en;q=0.9,zh;q=0.8,zh-CN;q=0.7', + 'cache-control': 'no-cache', + 'content-type': 'application/json', + 'cookie': + 'auth_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2Vy\ + X2lkIjoxMDksInVzZXJfbmFtZSI6ImRpZGkiLCJUWiI6IkFzaIAvU2hhb\ + mdoYWkiLCJleHAiOjE2OTM1Mzk4MjgsImlhdCI6MTY5MzUzODAyOH0.sF\ + ZYWM-YiKKGcD2udonHmCM_kLxyb3Dt0P6xQZs49u8', + 'dnt': '1', + 'origin': 'https://build.dev.oepkgs.net', + 'pragma': 'no-cache', + 'referer': 'https://build.dev.oepkgs.net/rpm/task', + 'sec-ch-ua': '"Chromium";v="116", "Not)A;Brand";v="24", "Google Chrome";v="116"', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHT\ + ML, like Gecko) Chrome/116.0.0.0 Safari/537.36', + 'x-auth-token': opekgstoken, + } + data2 = { + 'jobName': jobname, + 'jobId': jobid, + } + response2 = requests.post(url2, headers=headers2, json=data2) + #print(response2.status_code) + #print(response2.text) + if(response2.status_code == 200): + #print("success build") + return 'success' + else: + #print("fail build") + return 'fail' diff --git a/tools/oepkgs-check-rpmbuild/src/comment_message.py b/tools/oepkgs-check-rpmbuild/src/comment_message.py new file mode 100644 index 0000000000000000000000000000000000000000..0882c806d9bb2f96b6958cc85079958813e6bcf6 --- /dev/null +++ b/tools/oepkgs-check-rpmbuild/src/comment_message.py @@ -0,0 +1,67 @@ +#import logging.config +#import argparse +#import time + + +class CommentMessage(object): + """ + the result in table to comment + """ + + def __init__(self, result0, result1): + """ + :param result0: the aarch64 build result + :param result1: the x86_64 build result + """ + self._result0 = result0 + self._result1 = result1 + + @classmethod + def table_head(cls): + """ + the head of the table + | Arch | Check Arch | Build_Result | Result_Detail | + """ + return "Arch Check Arch Build_Result Result_Detail " + + + @classmethod + def table_content(cls, arch, check_arch, result, build_num): + """ + the content of the table + :param build_num: jenkins build id + """ + href = "https://jenkins.openeuler.isrc.ac.cn/job/OepkgsNetCheck/{}/console".format(build_num) + return "{} {} {}" \ + "{}{}".format(arch, check_arch, result, href, "#", build_num) + + + def build_table(self, build_num): + """ + get the build result + :param build_num: jenkins build id + :return: + the final table + """ + + comments = ["", self.table_head()] + result_table = self.get_result_table(build_num) + comments.extend(result_table) + comments.append("
") + return comments + + + def get_result_table(self, build_num): + """ + :param build_num: jenkins build id + :return: + the build result table + """ + comments = [] + line1 = self.__class__.table_content("aarch64", "Yes", self._result0, build_num) + line2 = self.__class__.table_content("x86_64", "Yes", self._result1, build_num) + comments.append(line1) + comments.append(line2) + return comments + + \ No newline at end of file diff --git a/tools/oepkgs-check-rpmbuild/src/create_job.py b/tools/oepkgs-check-rpmbuild/src/create_job.py new file mode 100644 index 0000000000000000000000000000000000000000..3c8192df0675a34f36d48e68aba0ef817f0f40df --- /dev/null +++ b/tools/oepkgs-check-rpmbuild/src/create_job.py @@ -0,0 +1,66 @@ +import uuid +import json +import requests +#from get_token import get_oepkgs_token + + +def create_job(opekgstoken, repo_url, bb, build_id, buildbranch): + """ + create a job in oepkgs.net + :param opekgstoken: the login token of the account oepkgs_management + :param repo_url: the repo url containing the source code of the rpm + :param ccArch: build arch: aarch64 or x86_64 + :param tbranch: the branch of the url + :param build_id: the repo id + :param buildbranch: the version of openeuler to build rpm + :return: + jobid: the id of the job + jobname: the name of the job + """ + url = 'https://build.dev.oepkgs.net/api/build/task/create' + headers = { + 'authority': 'build.dev.oepkgs.net', + 'accept': '*/*', + 'accept-language': 'en-US,en;q=0.9,zh;q=0.8,zh-CN;q=0.7', + 'cache-control': 'no-cache', + 'content-type': 'application/json', + 'cookie': 'auth_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxMDks\ + InVzZXJfbmFtZSI6ImRpZGkiLCJUWiI6IkFzaWEvU2hhbmdoYWkiLCJleHAiOjE2OTMzNzAwMzMsIml\ + hdCI6MTY5MzM2ODIzM30.szb3CB_U3DJOVG94JzHkUBqTjD0x8WM0JCJz3fNODuc', + 'dnt': '1', + 'origin': 'https://build.dev.oepkgs.net', + 'pragma': 'no-cache', + 'referer': 'https://build.dev.oepkgs.net/rpm/task/create', + 'sec-ch-ua': '"Chromium";v="116", "Not)A;Brand";v="24", "Google Chrome";v="116"', + 'sec-ch-ua-mobile': '?0', + 'sec-ch-ua-platform': '"Windows"', + 'sec-fetch-dest': 'empty', + 'sec-fetch-mode': 'cors', + 'sec-fetch-site': 'same-origin', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHT\ + ML, like Gecko) Chrome/116.0.0.0 Safari/537.36', + 'x-auth-token': opekgstoken, + } + data = { + 'builder': 1, + 'jobName': str(uuid.uuid4()), + 'os': 'openEuler', + 'osFull': buildbranch, + 'ccArch': bb[0], + 'repoId': build_id, + 'scmRepo': repo_url, + 'branch': bb[1] + } + response = requests.post(url, headers=headers, json=data) + #print(response.status_code) + #print(response.text) + res_data = json.loads(response.text) + #print(res_data) + if(response.status_code == 200): + return 'success', data['jobName'], res_data['data']['jobId'] + else: + return 'fail', 'nothing', 'nothing' + +#token=get_oepkgs_token() +#re=create_job(token, 'https://gitee.com/src-oepkgs/solr', 'x86_64', 'openEuler-22.03-LTS-SP1', 127,'22.03-LTS-SP1') +#print(re) diff --git a/tools/oepkgs-check-rpmbuild/src/get_record.py b/tools/oepkgs-check-rpmbuild/src/get_record.py new file mode 100644 index 0000000000000000000000000000000000000000..66ad5b642ab31007e887fea64347a45e10c877d2 --- /dev/null +++ b/tools/oepkgs-check-rpmbuild/src/get_record.py @@ -0,0 +1,63 @@ +import time +import json +from get_token import get_oepkgs_token +from logger import log_info +import requests + + +def get_build_record(opekgstoken, jobname, jobid): + """ + start to build job in oepkgs.net + :param opekgstoken: the login token of the account oepkgs_management + :param jobid: the id of the job + :param jobname: the name of the job + :return: + the status of the job + """ + iid = str(jobid) + url = 'https://build.dev.oepkgs.net/api/build/task/getBuildRecord/' + iid + '?pageNum=1&pageSize=5' + headers = { + 'authority': 'build.dev.oepkgs.net', + 'accept': '*/*', + 'accept-language': 'en-US,en;q=0.9,zh;q=0.8,zh-CN;q=0.7', + 'cache-control': 'no-cache', + 'content-type': 'application/json', + 'cookie': + 'auth_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxMDksInVzZXJfbmFtZSI6ImR\ + pZGkiLCJUWiI6IkFzaWEvU2hhbmdoYWkiLCJleHAiOjE2OTM1Mzk4MjgsImlhdCI6MTY5MzUzODAyOH0.sFZYWM-\ + YiKKGcD2udonHmCM_kLxyb3Dt0P6xQZs49u8', + 'dnt': '1', + 'pragma': 'no-cache', + 'referer': 'https://build.dev.oepkgs.net/rpm/task', + 'sec-ch-ua': '"Chromium";v="116", "Not)A;Brand";v="24", "Google Chrome";v="116"', + 'x-auth-token': opekgstoken, + } + params = { + "jobName": jobname, + } + response = requests.get(url, headers=headers, params=params) + #print(response) + res_data = json.loads(response.text) + #print(res_data['data']) + + wait_time = 0 + while res_data['data']['list'] is None: + log_info("Time:" + str(wait_time) + "; Failed to get build record") + time.sleep(30) + wait_time = wait_time + 1 + if wait_time > 5: + return "no build list" + + if len(res_data['data']['list']) == 0: + return "no build task" + + build_result = res_data['data']['list'][0] + #print(build_result) + log_info(str(build_result)) + re = build_result['result'] + #print(re) + return re + +#token=get_oepkgs_token() +#re=get_build_record(token, "13369748-64fe-4e63-b2cd-aee9cc6eb315",1015) +#print(re) diff --git a/tools/oepkgs-check-rpmbuild/src/get_token.py b/tools/oepkgs-check-rpmbuild/src/get_token.py new file mode 100644 index 0000000000000000000000000000000000000000..a8e9e49dc25120aec1dc0f108e83271ecdaace08 --- /dev/null +++ b/tools/oepkgs-check-rpmbuild/src/get_token.py @@ -0,0 +1,38 @@ +from selenium import webdriver +from selenium.webdriver.common.by import By + + +def get_oepkgs_token(): + ''' + use selenium to emulate login + account: oepkgs_management + :return: + oepkgs_token: the login token of the account oepkgs_management + ''' + options = webdriver.ChromeOptions() + #options.add_argument("--auto-open-devtools-for-tabs") + options.add_argument('--headless') + options.add_argument('--no-sandbox') + options.add_argument('--disable-gpu') + options.add_argument('--disable-dev-shm-usage') + options.add_argument("--auto-open-devtools-for-tabs") + + driver = webdriver.Chrome(options=options) + driver.get("https://build.dev.oepkgs.net/rpm/task") + try: + driver.implicitly_wait(10) + username_input = driver.find_element(By.NAME, "username") + password_input = driver.find_element(By.NAME, "password") + username_input.send_keys("oepkgs_management@163.com") + password_input.send_keys("123456Aa!") + login_button = driver.find_element(By.ID, "kc-login") + login_button.click() + cookies = driver.get_cookies() + for cookie in cookies: + None + #print(cookie['name'], cookie['value']) + finally: + driver.quit() + return cookie['value'] + +#get_oepkgs_token() \ No newline at end of file diff --git a/tools/oepkgs-check-rpmbuild/src/gitee_message.py b/tools/oepkgs-check-rpmbuild/src/gitee_message.py new file mode 100644 index 0000000000000000000000000000000000000000..c11d518648e49baaa35548ab6ec4f211e93605cd --- /dev/null +++ b/tools/oepkgs-check-rpmbuild/src/gitee_message.py @@ -0,0 +1,36 @@ +from tools import get_requests + + +class GiteeMessage(object): + """ + the result in table to comment + """ + + def __init__(self, pr_num, repo_name, gitee_token): + """ + :param pr_num: the pr number + :param repo_name: the name of the repo + :param gitee_token: the toen of the gitee user + """ + self._pr_num = pr_num + self._repo_name = repo_name + self._gitee_token = gitee_token + + def comment_pr(self, comment): + """ + comment pull request + :param comment: the content of the comment + :return: + whether successfully comment the pr + """ + #logger.debug("comment pull request %s", pr_num) + owner = "src-oepkgs" + comment_pr_url = "https://gitee.com/api/v5/repos/{}/{}/pulls/{}/comments"\ + .format(owner, self._repo_name, self._pr_num) + data = {"access_token": self._gitee_token, "body": comment} + + rs = get_requests("post", comment_pr_url, body=data, timeout=30) + if rs != 0: + #logger.warning("pr comment failed") + return False + return True \ No newline at end of file diff --git a/tools/oepkgs-check-rpmbuild/src/init_env.sh b/tools/oepkgs-check-rpmbuild/src/init_env.sh new file mode 100644 index 0000000000000000000000000000000000000000..e39fa7b88eaa199ca5f469e277c16e53ecbe3b4e --- /dev/null +++ b/tools/oepkgs-check-rpmbuild/src/init_env.sh @@ -0,0 +1,22 @@ +pip3 install selenium +sudo apt-get install wget + +#google-chrome --version +#chromedriver --version + +# install google-chrome +wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb +sudo apt install -y ./google-chrome-stable_current_amd64.deb +google-chrome --version + +# install chromedriver +wget https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/119.0.6045.159/linux64/chromedriver-linux64.zip +unzip chromedriver-linux64.zip +cd chromedriver-linux64 +cp chromedriver /usr/bin/ +chromedriver --version + +#google-chrome + +#python3 start.py +sh start.sh ${giteeSourceBranch} ${giteeSourceRepoURL} ${giteeTargetRepoName} ${giteePullRequestIid} ${BUILD_ID} \ No newline at end of file diff --git a/tools/oepkgs-check-rpmbuild/src/logger.py b/tools/oepkgs-check-rpmbuild/src/logger.py new file mode 100644 index 0000000000000000000000000000000000000000..e76b744f6af80a2a1592f789f24d31b095f28043 --- /dev/null +++ b/tools/oepkgs-check-rpmbuild/src/logger.py @@ -0,0 +1,16 @@ +import logging.config + +logging.basicConfig(level=logging.DEBUG) +logger = logging.getLogger("info") + + +def log_info(ss): + logger.info(ss) + + +def log_error(ss): + logger.error(ss) + + +def log_warning(ss): + logger.warning(ss) \ No newline at end of file diff --git a/tools/oepkgs-check-rpmbuild/src/start.py b/tools/oepkgs-check-rpmbuild/src/start.py new file mode 100644 index 0000000000000000000000000000000000000000..b47307465da047c378376609843bbfb2b5139c8d --- /dev/null +++ b/tools/oepkgs-check-rpmbuild/src/start.py @@ -0,0 +1,34 @@ +import logging.config +import argparse +from start_build import start_build + + +def init_args(): + """ + init args + get args from command line + :return: + input args + """ + parser = argparse.ArgumentParser() + parser.add_argument("-p", type=int, dest="pr", help="pull request number") + parser.add_argument("-u", type=str, dest="url", help="repo_url") + parser.add_argument("-r", type=str, dest="repo", help="repo_name") + parser.add_argument("-b", type=str, dest="branch", help="gitee branch") + parser.add_argument("-bb", type=str, dest="buildbranch", help="build branch") + parser.add_argument("-n", type=int, dest="job_id", help="jenkins build number") + + return parser.parse_args() + + +if "__main__" == __name__: + args = init_args() + + logger = logging.getLogger("info") + + logger.info("Start Init Environment") + + logger.info("Init Success") + + start_build(args) + logger.info("Finish") \ No newline at end of file diff --git a/tools/oepkgs-check-rpmbuild/src/start.sh b/tools/oepkgs-check-rpmbuild/src/start.sh new file mode 100644 index 0000000000000000000000000000000000000000..86d631cfa2c1ec200be6bc27ba9e41520146221f --- /dev/null +++ b/tools/oepkgs-check-rpmbuild/src/start.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +# display the information +function log_info() +{ + echo "[`date +%Y-%m-%d\ %T`] [ INFO ] $@" +} + + +function log_error() +{ + echo -e "\033[31m"[`date +%Y-%m-%d\ %T`] [ ERROR ] $@" \033[0m" + exit 1 +} + + +# start to check rpmbuild result +function check_build() { + log_info "***** Start to check rpmbuild result *****" + python3 start.py -b $1 -u $2 -r $3 -p $4 -n $5 -bb $6 + log_info "***** End to check rpmbuild result *****" +} + +# the start point +function main() { + + check_build $1 $2 $3 $4 $5 $6 +} + +main $1 $2 $3 $4 $5 $6 \ No newline at end of file diff --git a/tools/oepkgs-check-rpmbuild/src/start_build.py b/tools/oepkgs-check-rpmbuild/src/start_build.py new file mode 100644 index 0000000000000000000000000000000000000000..9a5ae7f548185afe8520ca640bcaab954e30b4fb --- /dev/null +++ b/tools/oepkgs-check-rpmbuild/src/start_build.py @@ -0,0 +1,148 @@ +import time +from get_token import get_oepkgs_token +from create_job import create_job +from comment_message import CommentMessage +from gitee_message import GiteeMessage +from build_job import build_job +from get_record import get_build_record +from logger import log_info, log_error, log_warning +from tools import get_branch + + +class MyException(Exception): + ''' + detect exception + ''' + pass + + +def get_info(args): + ''' + process the input args + :param args: the input args from command line + + :return: + buildbranch: openeuler version to build,e.g. 22.03-LTS-SP1 + token: the login token of the account oepkgs_management + ''' + buildbranch = get_branch(args.buildbranch) + token = get_oepkgs_token() + #print(token) + log_info("oepkgs_token:" + token) + return buildbranch, token + + +def rpmbuild_action(token, url, bb, repoid, buildbranch): + """ + start create job and build job + :param token: the login token of the account oepkgs_management + :param url: the repo url containing the source code of the rpm + :param arch: build arch: aarch64 or x86_64 + :param branch: the branch of the url + :param repoid: the repo id + :param buildbranch: the version of openeuler to build rpm + :return: + jobid: the id of the job + jobname: the name of the job + """ + create_success, jobname, jobid = create_job(token, url, bb, repoid, buildbranch) + if create_success == 'fail': + log_error("failed to create a job") + raise MyException("can't create a job") + elif create_success == 'success': + log_info("successfully create a job: " + "jobName " + str(jobname) + "; jobId " + str(jobid)) + + build_success = build_job(token, jobname, jobid) + if build_success == 'fail': + log_error("failed to build a job") + raise MyException("can't build a job") + elif build_success == 'success': + log_info("successfully build a job:" + "jobName " + str(jobname) + "; jobId " + str(jobid)) + + return jobname, jobid + + +def git_comment(jobname, jobid, res): + ''' + print git comment + ''' + #print("git comment:") + log_info("jobName:" + str(jobname) + "; jobid:" + str(jobid) + "; result:" + str(res)) + return res + + +def get_result(token, jobname_list, jobid_list): + ''' + get build result + :param token: the login token of the account oepkgs_management + :param jobid: the id list of the jobs + :param jobname: the name list of the jobs + :return: + build result + ''' + get_result0 = 0 + get_result1 = 0 + roun = 0 + while True: + if get_result0 == 0: + jobname = jobname_list[0] + jobid = jobid_list[0] + res = get_build_record(token, jobname, jobid) + if res == 'SUCCESS' or res == 'FAILURE': + log_info("aarch64:") + result0 = git_comment(jobname, jobid, res) + get_result0 = 1 + if get_result1 == 0: + jobname = jobname_list[1] + jobid = jobid_list[1] + res = get_build_record(token, jobname, jobid) + if res == 'SUCCESS' or res == 'FAILURE': + log_info("x86_64:") + result1 = git_comment(jobname, jobid, res) + get_result1 = 1 + if get_result1 == 1 and get_result0 == 1: + break + time.sleep(120) + roun = roun + 1 + if roun > 30: + if get_result0 == 0: + result0 = 'TIME OUT' + if get_result1 == 0: + result1 = 'TIME OUT' + break + + return result0, result1 + + +def start_build(args): + ''' + start the check rpmbuild result process + + 1)create and build job + 2)get build record + 3)comment pr in gitee + ''' + url = args.url + branch = args.branch + repoid = 127 + branch_list = ['aarch64', 'x86_64'] + + buildbranch, token = get_info(args) + jobname_list = [] + jobid_list = [] + for arch in branch_list: + bb = [arch, branch] + name, iid = rpmbuild_action(token, url, bb, repoid, buildbranch) + jobname_list.append(name) + jobid_list.append(iid) + + result0, result1 = get_result(token, jobname_list, jobid_list) + ini = CommentMessage(result0, result1) + + #ini=CommentMessage('SUCCESS','FAILED') + comment = ini.build_table(args.job_id) + git = GiteeMessage(args.pr, args.repo, "c951fee688f4b037d27602d7461b81fc") + log_info(comment) + git.comment_pr("\n".join(comment)) + + diff --git a/tools/oepkgs-check-rpmbuild/src/tools.py b/tools/oepkgs-check-rpmbuild/src/tools.py new file mode 100644 index 0000000000000000000000000000000000000000..6a242cce6b3c717bad1d56bdb031c285fe541509 --- /dev/null +++ b/tools/oepkgs-check-rpmbuild/src/tools.py @@ -0,0 +1,42 @@ +import requests + + +def get_requests(method, url, body=None, timeout=30, obj=None): + """ + http request + :param method: http method + :param url: http[s] schema + :param body: json + :param timeout: second + :param obj: callback object, support list/dict/object + :return: + """ + get_function = getattr(requests, method.lower()) + result = get_function(url, json=body, timeout=timeout) + + result_list = [requests.codes.ok, requests.codes.created, requests.codes.no_content] + if result.status_code not in result_list: + return 2 + + if obj is not None: + if isinstance(obj, dict): + obj.update(result.json()) + return 0 + + +def get_branch(gitbranch): + """ + get build branch + :param gitbranch: the branch of the repo + :return: + the build branch,which version of openeuler + """ + branch = '' + if gitbranch == 'master': + branch = '20.03-LTS-SP1' + else: + branch = gitbranch[10:] + return branch + +#t1=get_branch('openEuler-20.03-LTS-SP3') +#print(t1) \ No newline at end of file