forked from cliqz-oss/browser-android
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJenkinsfile
More file actions
133 lines (127 loc) · 6.27 KB
/
Jenkinsfile
File metadata and controls
133 lines (127 loc) · 6.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#!/bin/env groovy
node('us-east-1 && ubuntu && docker && !gpu') {
stage('Checkout') {
checkout scm
}
sh "`aws ecr get-login --region=us-east-1 --no-include-email`"
def apk = "app/build/outputs/apk/standardX86/debug/app-standard-x86-debug.apk"
def instance_id = sh(returnStdout: true, script: '''
aws ec2 run-instances --image-id ami-13050368 --count 1 --instance-type t2.medium --key-name android_ci_genymotion --security-group-ids sg-5bbf173f --subnet-id subnet-341ff61f --region=us-east-1 --query "Instances[].InstanceId" --output text
''').trim()
def ip = sh(returnStdout: true, script: """
aws ec2 describe-instances --instance-ids $instance_id --region=us-east-1 --query 'Reservations[].Instances[].PrivateIpAddress' --output text
""").trim()
sh "aws ec2 create-tags --resources $instance_id --region=us-east-1 --tag Key=Name,Value='Appium-Genymotion'"
try{
withCredentials([file(credentialsId: '48f6d4df-68d9-4b42-9dc3-0e8b90a28b52', variable:'AUTOBOTS_KEY')]) {
sh '''#!/bin/bash -l
set -x
set -e
mkdir -p ~/.ssh
rm -f ~/.ssh/id_rsa
cp $AUTOBOTS_KEY ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
'''
stage('Checkout Autobots'){
sh '''
rm -rf external/autobots
git submodule update --init --recursive external/autobots
'''
}
}
def dockerfileChecksum = sh(returnStdout: true, script: 'md5sum Dockerfile | cut -d" " -f1').trim()
def dockerTag = "${dockerfileChecksum}"
def baseImageName = "browser-android/build:${dockerTag}"
stage('Build docker image') {
docker.withRegistry('https://141047255820.dkr.ecr.us-east-1.amazonaws.com'){
try {
def image = docker.image(baseImageName)
image.pull()
} catch (e) {
print e
def baseImage = docker.build(baseImageName, '--build-arg UID=`id -u` --build-arg GID=`id -g` .')
baseImage.push dockerTag
}
}
}
def args = "-v ${pwd}/artifacts:/artifacts:rw"
docker.image("141047255820.dkr.ecr.us-east-1.amazonaws.com/${baseImageName}").inside(args) {
stage('Extension') {
sh '''yarn && npm run dev-bundle'''
}
stage('Compile') {
sh './gradlew --stacktrace clean assembleStandardX86Debug'
}
try{
withEnv(["IP=${ip}", "APP=${apk}", "platformName=android", "deviceName=127.0.0.1:5556"]){
withCredentials([file(credentialsId: 'f4141ff9-4dc0-4250-84b5-ef212d4fbb42', variable: 'FILE' )]){
stage('Run Tests') {
sh '''#!/bin/bash -l
npm uninstall -g appium || true
npm uninstall wd || true
'''
timeout(60) {
sh'''#!/bin/bash -l
set -x
set -e
chmod 400 $FILE
ssh -v -o StrictHostKeyChecking=no -i $FILE root@$IP "setprop persist.sys.usb.config adb"
ssh -v -o StrictHostKeyChecking=no -i $FILE -NL 5556:127.0.0.1:5555 root@$IP &
~/android_home/platform-tools/adb connect 127.0.0.1:5556
~/android_home/platform-tools/adb wait-for-device
npm install -g appium@1.7.1
npm install wd
appium &
export app=$PWD/$APP
cd external/autobots
chmod 0755 requirements.txt
virtualenv ~/venv
source ~/venv/bin/activate
pip install -r requirements.txt
python testRunner.py || true
'''
}
}
}
}
}
finally{
stage('Generate and Upload Results') {
archiveArtifacts allowEmptyArchive: true, artifacts: 'external/autobots/*.log'
zip archive: true, dir: 'external/autobots/screenshots', glob: '', zipFile: 'external/autobots/screenshots.zip'
junit "external/autobots/test-reports/*.xml"
def report_folder = sh(returnStdout: true, script: 'echo ${JOB_NAME#cliqz/browser/android-browser/}-${BUILD_NUMBER}').trim()
withEnv(["REPORT_FOLDER=${report_folder}"]){
sh '''#!/bin/bash -l
set -x
set -e
cd external/autobots/unitth/
cp unitth.* ../test-reports/
cd ../test-reports/
java -jar unitth.jar .
'''
}
zip archive: true, dir: 'external/autobots/test-reports', glob: '', zipFile: 'external/autobots/reports.zip'
//s3Upload bucket: 'cdn.cliqz.com', file: '${report_folder}', path: 'mobile/browser/reports/${report_folder}'
}
stage('Clean Up') {
sh '''#!/bin/bash -l
rm -rf node-modules
rm -rf jsengine/*
npm uninstall -g appium
npm uninstall wd
'''
}
}
}
}
finally{
sh """#!/bin/bash -l
set -x
set -e
aws ecr get-login --region=us-east-1 --no-include-email
aws ec2 terminate-instances --instance-ids ${instance_id} --region=us-east-1
"""
}
}