Skip to content

Commit fa67b67

Browse files
authored
Merge pull request #7 from Fac2Real/feature/CI
feat | 없음 | 없음 | Jenkins CI/CD | 정주영
2 parents e2d005d + c7c07c6 commit fa67b67

2 files changed

Lines changed: 128 additions & 0 deletions

File tree

Jenkinsfile

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
pipeline {
2+
agent any;
3+
4+
environment {
5+
AWS_DEFAULT_REGION = 'ap-northeast-2'
6+
S3_BUCKET = 'monitory-wearable/android'
7+
8+
GRADLE_OPTS = "-Dorg.gradle.jvmargs=-Xmx4g"
9+
APK_PATH = "mobile/build/outputs/apk/debug/mobile-debug.apk"
10+
11+
GH_CHECK_NAME = "Wearable assembleDebug"
12+
13+
SLACK_CHANNEL = '#ci-cd'
14+
SLACK_CRED_ID = 'slack-factoreal-token' // Slack App OAuth Token
15+
}
16+
17+
stages {
18+
19+
stage('Checkout') {
20+
steps { checkout scm }
21+
}
22+
23+
/* google-services.json & PEM 파일 복원 */
24+
stage('Inject secrets') {
25+
steps {
26+
withCredentials([
27+
string(credentialsId: 'google-services-json', variable: 'GOOGLE_JSON'),
28+
string(credentialsId: 'iot-certificate', variable: 'IOT_CERT'),
29+
string(credentialsId: 'iot-private-pem', variable: 'IOT_PEM'),
30+
string(credentialsId: 'amazon-root-ca1', variable: 'AMAZON_ROOT_CA1'),
31+
]) {
32+
sh '''
33+
# 경로 준비
34+
mkdir -p mobile/src/main
35+
mkdir -p mobile/src/main/assets
36+
37+
# google-services.json
38+
echo "$GOOGLE_JSON" > mobile/google-services.json
39+
chmod 644 mobile/google-services.json
40+
41+
# PEMs
42+
echo "$IOT_CERT" > mobile/src/main/assets/c060311b74ab5d78e0c9918acc72ebeb07d4d48accfab78d7296dae0e3718872-certificate.pem.crt
43+
chmod 644 mobile/src/main/assets/*-certificate.pem.crt
44+
45+
echo "$IOT_PEM" > mobile/src/main/assets/c060311b74ab5d78e0c9918acc72ebeb07d4d48accfab78d7296dae0e3718872-private.pem.crt
46+
chmod 644 mobile/src/main/assets/*-private.pem.crt
47+
48+
echo "$AMAZON_ROOT_CA1" > mobile/src/main/assets/AmazonRootCA1.pem
49+
chmod 644 mobile/src/main/assets/AmazonRootCA1.pem
50+
'''
51+
}
52+
}
53+
}
54+
55+
stage('Gradle assembleDebug') {
56+
when { not { changeRequest() } }
57+
steps {
58+
sh 'chmod +x ./gradlew'
59+
sh './gradlew :mobile:assembleDebug --stacktrace --warn'
60+
}
61+
post {
62+
success {
63+
/* 상태 = SUCCESS */
64+
publishChecks name: env.GH_CHECK_NAME,
65+
conclusion: 'SUCCESS',
66+
detailsURL: env.BUILD_URL
67+
}
68+
failure {
69+
/* 상태 = FAILURE + 로그 링크 */
70+
publishChecks name: env.GH_CHECK_NAME,
71+
conclusion: 'FAILURE',
72+
detailsURL: "${env.BUILD_URL}console"
73+
slackSend channel: env.SLACK_CHANNEL,
74+
tokenCredentialId: env.SLACK_CRED_ID,
75+
color: '#ff0000',
76+
message: """:x: *Wearable assembleDebug 실패*
77+
파이프라인: <${env.BUILD_URL}|열기>
78+
커밋: `${env.GIT_COMMIT}` – `${env.COMMIT_MSG}`
79+
(<${env.REPO_URL}/commit/${env.GIT_COMMIT}|커밋 보기>)
80+
"""
81+
}
82+
}
83+
}
84+
85+
stage('Archive APK && Upload to S3') {
86+
when {
87+
allOf {
88+
anyOf {
89+
branch 'develop'
90+
branch 'main'
91+
}
92+
not { changeRequest() } // PR 빌드는 건너뜀
93+
}
94+
}
95+
steps {
96+
archiveArtifacts artifacts: "${APK_PATH}", fingerprint: true
97+
withCredentials([[$class: 'AmazonWebServicesCredentialsBinding',
98+
credentialsId: 'jenkins-access']]) {
99+
sh '''
100+
aws s3 cp ${APK_PATH} s3://${S3_BUCKET}/
101+
'''
102+
}
103+
}
104+
post {
105+
success {
106+
slackSend channel: env.SLACK_CHANNEL,
107+
tokenCredentialId: env.SLACK_CRED_ID,
108+
color: '#36a64f',
109+
message: """:white_check_mark: *Wearable CI/CD 성공*
110+
파이프라인: <${env.BUILD_URL}|열기>
111+
커밋: `${env.GIT_COMMIT}` – `${env.COMMIT_MSG}`
112+
(<${env.REPO_URL}/commit/${env.GIT_COMMIT}|커밋 보기>)
113+
"""
114+
}
115+
failure {
116+
slackSend channel: env.SLACK_CHANNEL,
117+
tokenCredentialId: env.SLACK_CRED_ID,
118+
color: '#ff0000',
119+
message: """:x: *Wearable CI/CD 실패*
120+
파이프라인: <${env.BUILD_URL}|열기>
121+
커밋: `${env.GIT_COMMIT}` – `${env.COMMIT_MSG}`
122+
(<${env.REPO_URL}/commit/${env.GIT_COMMIT}|커밋 보기>)
123+
"""
124+
}
125+
}
126+
}
127+
}
128+
}

0 commit comments

Comments
 (0)