빌드 가이드 문서
https://lgtest.atlassian.net/wiki/spaces/FE/pages/78217452/AOS+Jenkins
false
15
-1
-1
-1
false
url
LT환경 설정화면이 없이 고정주소 빌드가 필요할때 사용해 주세요.
공백일경우 앱시작시 LT환경 설정이 나옵니다.
(http또는 https를 포함한 주소를 넣어주세요. 공백이 포함되거나, 마지막 /가 포함되면 정상 실행이 되지 않을수 있습니다.)
false
modify_app_id
App ID를 변경합니다. 'com.lguplus.mobile.cs' 에서 추가로 값이 추가되어 운영버전의 앱과 중복 설치 가능하게 됩니다.
예를들어 myapp로 설정시 App ID 'com.lguplus.mobile.cs.myapp'으로 빌드되며, 앱이름은 '당신의 U+ (myapp)로 설정됩니다. 앱아이콘은 dev띠를 두릅니다.
공백일경우 운영과 동일한 App ID로 빌드됩니다.
(텍스트내 공백무시, 대문자 무시, 기호불가, 10자 한정, 10자 초과시 자름)
dev
true
slack_message
빌드 완료시 Slack에 메세지를 보낼때, 어떤용도의 빌드인지 알기 위한 판별용 메세지입니다.
등록된 사용자의 경우 멘션(@김아무개) 사용도 가능합니다.
false
branch
빌드할 브런치입니다. 특정 feature 브런치용 빌드를 원하신다면 설정에서 이 항목에 추가해주세요.
(수정권한이 없으면 앱파트에 요청해주세요.)
main
develop
release/7.0.6
release/7.0.7
release/7.0.10
release/7.0.11
release/6.0.38_test
feature/DCBGIT-21704_U+2.0크롬판별_이슈
feature/DCBGIT-20848_LT빌드-자동화
feature/DCBGIT-18853_딥링크_이동페이지_변경
feature/DCBGWBS-6721_가속화002_챗봇
feature/DCBGQA-6078_용어사전pdf_다운로드이슈
feature/DCBGIT-24352_디바이스식별자전달
slack_channel
알림을 보낼 Slack 채널을 선택합니다.
디지털fe-앱빌드
디지털fe-앱빌드_테스트
debuggable
디버깅 가능한 빌드인지 여부입니다. 체크시 디버깅 가능한 빌드로 빌드 됩니다.
true
share
외부공유용 (Firebase 이용)
false
obfuscation
난독화를 할지 여부 입니다.
false
release
메인 url을 제외한 빌드세팅을 Release환경으로 선택하여 빌드 합니다. (메인 url은 위에 있는 url필드 값을 따라갑니다.)
false
BuildData
빌드용 스크립트입니다. 터치하지 마세요.
---
############################ Properties ############################
property:
workspace: '${WORKSPACE}'
slackChannel: '${slack_channel}'
slackMessage: '${slack_message}'
branch: '${branch}'
url: '${url}'
appID: '${modify_app_id}'
share: '${share}'
obfuscation: '${obfuscation}'
release: '${release}'
urlValue: https://mstg.lguplus.com
fileUrl: http://febuild.uhdcsre.com:8080/job/mcs-aos/${BUILD_NUMBER}/artifact/app/build/outputs/apk/mobileCS/lt/{FILE}
urlMessage: ''
appIDMessage: ''
portValue: ''
enableDevTool: 'true'
gradlePath: <!property.workspace>/app/build.gradle
stringsPath: <!property.workspace>/app/src/main/res/values/strings.xml
manifestPath: <!property.workspace>/app/src/main/AndroidManifest.xml
buildPath: <!property.workspace>/app/build/outputs/apk/mobileCS/lt
config: |
{
"version": "VERSION",
"versionCode": VERSION_CODE,
"gitHash": "GIT_HASH",
"buildDate": "BUILD_DATE"
}
templateLt: |
lt {
debuggable ${debuggable}
signingConfig null
buildConfigField 'boolean', 'ENABLE_DEVTOOL', "{ENABLE_DEVTOOL}"
buildConfigField 'boolean', 'DEV', "${debuggable}"
buildConfigField 'String', 'DEBUG_LOG_TAG', '"MobileCS_STG"'
buildConfigField 'String', 'HTTP_WEB_URL', '"{HTTP_URL}"'
buildConfigField 'String', 'WEB_URL', '"{URL}"'
buildConfigField 'String', 'PUSH_APPLICATION_ID', '"custm_FCM1"'
buildConfigField 'String', 'PUSH_SERVICE_ID', '"30153"'
buildConfigField 'String', 'PUSH_URL', '"http://222.231.13.33:5556"'
buildConfigField 'String', 'PUSH_AUTH', '"auth=0000002359;C20384A50EBCD4FD2A1B"'
buildConfigField 'String', 'CHATBOT_URL', '"https://chatbot-stg.lguplus.com/?fromChan=APP"'
buildConfigField 'String', 'FIDO_URL', '"https://stg-onps.uplus.co.kr"'
buildConfigField 'String', 'FIDO_BIZ_API_URL', '"https://stg.uplus.co.kr/uhdc/fo/apcm/authbio/v1"'
buildConfigField 'String', 'FIDO_SITE_ID', '"SIT01UPLUS0000000000"'
buildConfigField 'String', 'FIDO_SVC_ID', '"SVC01SIT01UPLUS00000"'
buildConfigField 'String', 'USIM_AGENT_API_KEY', '"a6AwmI2XEWup9MALI/Z/ASzDs87gcNmKifk2iyUUChs="'
buildConfigField 'String', 'SERVER_TYPE', '"STG"'
buildConfigField "java.util.Map<String, String>", "LT_ENVIRONMENT_MAP", "new java.util.HashMap<String, String>() {{ " +
" put(\"QA (https)\", \"https://mstg.lguplus.com\");" +
" put(\"QA\", \"http://mstg.lguplus.com\");" +
" put(\"운영\", \"https://app.lguplus.com\");" +
" put(\"PRE\", \"https://mpre.lguplus.com\");" +
" put(\"DEV\", \"http://mdev.uplus.com\");" +
"}}"
manifestPlaceholders = [buildType: ""]
}
templateRelease: |
lt {
debuggable ${debuggable}
minifyEnabled false
shrinkResources false
signingConfig null
buildConfigField 'boolean', 'ENABLE_DEVTOOL', "{ENABLE_DEVTOOL}"
buildConfigField 'boolean', 'DEV', "${debuggable}"
buildConfigField 'String', 'DEBUG_LOG_TAG', '"MobileCS"'
buildConfigField 'String', 'HTTP_WEB_URL', '"{HTTP_URL}"'
buildConfigField 'String', 'WEB_URL', '"{URL}"'
buildConfigField 'String', 'PUSH_APPLICATION_ID', '"custm_FCM1"'
buildConfigField 'String', 'PUSH_SERVICE_ID', '"21016"'
buildConfigField 'String', 'PUSH_URL', '"http://upushgw.uplus.co.kr:5556"'
buildConfigField 'String', 'PUSH_AUTH', '"auth=0000002415;CDAC132152FCB4F4499F"'
buildConfigField 'String', 'CHATBOT_URL', '"https://chatbot.lguplus.com/?fromChan=APP"'
buildConfigField 'String', 'FIDO_URL', '"https://onps.uplus.co.kr"'
buildConfigField 'String', 'FIDO_BIZ_API_URL', '"https://app.lguplus.com/uhdc/fo/apcm/authbio/v1"'
buildConfigField 'String', 'FIDO_SITE_ID', '"SIT01UPLUS0000000000"'
buildConfigField 'String', 'FIDO_SVC_ID', '"SVC01SIT01UPLUS00000"'
buildConfigField 'String', 'USIM_AGENT_API_KEY', '"mV/yWnRgD2wQn5sjzokKGVJZDdVKDnLPkvS4cG+jwZE="'
buildConfigField 'String', 'SERVER_TYPE', '"PROD"'
buildConfigField "java.util.Map<String, String>", "LT_ENVIRONMENT_MAP", "new java.util.HashMap<String, String>()"
manifestPlaceholders = [buildType: ""]
}
slackMessageAdd: |
"text": "<!property.slackMessage>",
slackMessageJson: |
{
"channel": "<!property.slackChannel>",
{SLACK_MESSAGE}
"attachments": [
{
"color": "#81CA3F",
"author_name": "Android",
"fields": [
{
"value": "```Builder: ${BUILD_USER}\nJob URL: ${BUILD_URL}\nBranch: ${GIT_BRANCH}\nGitHash: ${GIT_COMMIT}\nVersion: {VERSION}\nVersion Code: {VERSION_CODE}\nRelease 환경: ${release}\n{URL}DevTool 활성: {DEVTOOL}\n{APPID}Date: {DATE}```"
}
],
"image_url": "https://api.qrserver.com/v1/create-qr-code/?data={FILE_URL}&size=150x150",
"actions": [
{
"type": "button",
"name": "build",
"text": "Download",
"url": "{FILE_URL}"
}
]
}
]
}
############################# Pipeline #############################
pipeline:
id: main
workflow:
# Set app info
- exe: create-app
# Set envValue
- if:
condition-bool: <!property.release> == true
on-true:
- exe: set-release
on-false:
- exe: set-lt
# Set urlValue
- contain:
list: <!property.url>
target: '{url}'
on-false:
- exe: parse-url
- if:
condition-string: <!property.port> != 443
on-true:
- if:
condition-string: <!property.port> != 80
on-true:
- exe: set-port
- exe: set-url
# Gradle에 Signing 정보 입력
- exe: gradle-read
- exe: append-sign
- exe: replace-http-url
- exe: replace-url
- exe: replace-env
- exe: gradle-write
- contain:
list: <!property.appID>
target: '{modify_app_id}'
on-false:
- exe: set-appid-message
# 앱이름 변경
- exe: strings-read
- exe: app-rename
- exe: strings-write
# 파일 권한 및 아이콘 변경
- exe: manifest-read
- exe: replace-icon
- exe: replace-permission
- exe: manifest-write
# Listing Files
- exe: files
- foreach:
iterator: <!property.files>
setValue: <@property.file>
on-do:
# Pacckage name replace
- exe: file-read
- exe: replace-package
- exe: file-write
# Config 작성
- exe: set-config
- exe: write-config
# Gradle 빌드
- exe: build
# Slack Message가 빈값일때 empty 세팅
- contain:
list: <!property.slackMessage>
target: '{slack_message}'
on-true:
- exe: set-slack-message-empty
# Listing Build Files
- exe: files-build
- foreach:
iterator: <!property.files>
setValue: <@property.fileBuild>
on-do:
- contain:
list: <!property.fileBuild>
target: output-metadata.json
on-true:
- exe: read-build-meta
- if:
condition-string: <!property.enableDevTool> == false
on-true:
- exe: replace-file-name
- exe: rename-build-file
- exe: set-file-name
- exe: set-slack-message
- exe: slack
############################# Commands #############################
commands:
### Create App Data
- command: CreateAppData
id: create-app
param:
scm: Git
name: mcs
relativeAssetPath: app/src/main/assets
setVersion: <@property.version>
setHash: <@property.hash>
setDate: <@property.date>
### Set Lt
- command: SetValue
id: set-lt
param:
values-string:
envValue: <!property.templateLt>
### Set Release
- command: SetValue
id: set-release
param:
values-string:
envValue: <!property.templateRelease>
urlValue: http://app.lguplus.com
### Parse URL
- command: URLInfo
id: parse-url
param:
url: <!property.url>
setScheme: <@property.scheme>
setHost: <@property.host>
setPort: <@property.port>
### Set Port Value
- command: SetValue
id: set-port
param:
values-string:
portValue: :<!property.port>
### Set default url
- command: SetValue
id: set-url
param:
values-string:
urlValue: <!property.scheme>://<!property.host><!property.portValue>
urlMessage: 'URL: <!property.scheme>://<!property.host><!property.portValue>\n'
enableDevTool: 'false'
### Gradle Read
- command: FileRead
id: gradle-read
param:
showPrint: false
path: <!property.gradlePath>
setContent: <@property.gradle>
### Set Signing Option
- command: StringReplace
id: append-sign
param:
showPrint: false
text: <!property.gradle>
pair:
- from: android {
to: |
android {
signingConfigs {
Lt {
storeFile file("keystore.dat")
storePassword "123456"
keyAlias "kingkor"
keyPassword "123456"
}
}
setValue: <@property.gradle>
### Replace http url
- command: StringReplace
id: replace-http-url
param:
showPrint: true
text: <!property.urlValue>
pair:
- from: https://
to: http://
setValue: <@property.httpUrlValue>
### Replace url
- command: StringReplace
id: replace-url
param:
showPrint: true
text: <!property.envValue>
pair:
- from: '{HTTP_URL}'
to: <!property.httpUrlValue>
- from: '{URL}'
to: <!property.urlValue>
- from: '{ENABLE_DEVTOOL}'
to: <!property.enableDevTool>
setValue: <@property.envValue>
### Replace env
- command: StringReplacePattern
id: replace-env
param:
startAt: 0
showPrint: true
startPattern: 'lt {'
endPattern: ' }'
text: <!property.gradle>
value: <!property.envValue>
setValue: <@property.gradle>
### Gradle Write
- command: FileWrite
id: gradle-write
param:
path: <!property.gradlePath>
content: <!property.gradle>
### App ID Message
- command: SetValue
id: set-appid-message
param:
values-string:
appIDMessage: '변경된 App ID: com.lguplus.mobile.cs.<!property.appID>\n'
### Strings Read
- command: FileRead
id: strings-read
param:
showPrint: false
path: <!property.stringsPath>
setContent: <@property.strings>
### Replace App Name
- command: StringReplace
id: app-rename
param:
showPrint: false
text: <!property.strings>
pair:
- from: <string name="app_name">당신의 U+</string>
to: <string name="app_name">당유(<!property.appID>)</string>
setValue: <@property.strings>
### Strings Write
- command: FileWrite
id: strings-write
param:
path: <!property.stringsPath>
content: <!property.strings>
### Manifest Read
- command: FileRead
id: manifest-read
param:
showPrint: false
path: <!property.manifestPath>
setContent: <@property.manifest>
### Replace Icon
- command: StringReplace
id: replace-icon
param:
showPrint: false
text: <!property.manifest>
pair:
- from: android:icon="@drawable/ic_launcher"
to: android:icon="@drawable/ic_launcher_dev"
setValue: <@property.manifest>
### Replace Permission
- command: StringReplace
id: replace-permission
param:
showPrint: false
text: <!property.manifest>
pair:
- from: </application>
to: |
</application>
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" tools:ignore="ScopedStorage"/>
setValue: <@property.manifest>
### Manifest Write
- command: FileWrite
id: manifest-write
param:
path: <!property.manifestPath>
content: <!property.manifest>
### Files Listing
- command: Files
id: files
param:
path: <!property.workspace>/app
recursive: true
ignoreRegExs:
- ^.*\/\.[a-zA-Z0-9_-]+\/.* # .git .idea etc..
- ^.*\.(png|jpg|jpeg|gif|bmp)$ # image files
- ^.*\.(txt|so|mk|crt|ttf)$ # ignore ext
- /build/
- /buildScript/
- /schemas/
- /libs/
- /aars/
- /mobileCS/
- /.DS_Store
- /proguard-rules.pro
- /lint.xml
- /.gitignore
setFiles: <@property.files>
### File Read
- command: FileRead
id: file-read
param:
showPrint: false
path: <!property.file>
setContent: <@property.fileContent>
### Replace Package
- command: StringReplace
id: replace-package
param:
showPrint: false
text: <!property.fileContent>
pair:
- from: com.lguplus.mobile.cs
to: com.lguplus.mobile.cs.<!property.appID>
setValue: <@property.fileContent>
### Strings Write
- command: FileWrite
id: file-write
param:
path: <!property.file>
content: <!property.fileContent>
### Print
- command: Print
id: print
param:
message: 'File: <!property.file>'
### Set Config
- command: StringReplace
id: set-config
param:
showPrint: false
text: <!property.config>
pair:
- from: GIT_HASH
to: ${GIT_COMMIT}
- from: BUILD_DATE
to: <!property.date>
setValue: <@property.config>
### Write Config
- command: FileWrite
id: write-config
param:
path: <!property.workspace>/app/src/main/assets/config.json
content: <!property.config>
### Build Gradle
- command: Shell
id: build
param:
commands:
- ./gradlew clean assembleLt
### Build Files Listing
- command: Files
id: files-build
param:
path: <!property.workspace>/app/build/outputs/apk/mobileCS/lt
recursive: false
setFiles: <@property.files>
### Read build meta
- command: JsonReaderFile
id: read-build-meta
param:
path: <!property.fileBuild>
pair:
- from: elements[0].versionCode
setValue: <@property.versionCode>
- from: elements[0].versionName
setValue: <@property.versionName>
- from: elements[0].outputFile
setValue: <@property.fileBuildName>
- from: elements[0].outputFile
setValue: <@property.fileBuildReplacedName>
### Replace file name
- command: StringReplace
id: replace-file-name
param:
showPrint: false
text: <!property.fileBuildName>
pair:
- from: '_lt_'
to: '_<!property.host>_'
setValue: <@property.fileBuildReplacedName>
### Rename Build File
- command: Rename
id: rename-build-file
param:
renameMap:
<!property.workspace>/app/build/outputs/apk/mobileCS/lt/<!property.fileBuildName>: <!property.workspace>/app/build/outputs/apk/mobileCS/lt/<!property.fileBuildReplacedName>
### Set File Name
- command: StringReplace
id: set-file-name
param:
showPrint: false
text: <!property.fileUrl>
pair:
- from: '{FILE}'
to: <!property.fileBuildReplacedName>
setValue: <@property.fileUrl>
### Set Slack Message
- command: StringReplace
id: set-slack-message
param:
showPrint: false
text: <!property.slackMessageJson>
pair:
- from: '{SLACK_MESSAGE}'
to: <!property.slackMessageAdd>
- from: '{APPID}'
to: <!property.appIDMessage>
- from: '{DATE}'
to: <!property.date>
- from: '{VERSION}'
to: <!property.versionName>
- from: '{VERSION_CODE}'
to: <!property.versionCode>
- from: '{URL}'
to: <!property.urlMessage>
- from: '{DEVTOOL}'
to: <!property.enableDevTool>
- from: '{FILE_URL}'
to: <!property.fileUrl>
setValue: <@property.slackMessageJson>
### Set Slack Message to empty
- command: SetValue
id: set-slack-message-empty
param:
values-string:
slackMessageAdd: ''
### Slack
- command: Slack
id: slack
param:
token: xoxb-3457711939825-8629587578534-ysH4Q5R0lM8gdgJ8dx3z6xI7
messageJson: <!property.slackMessageJson>
idMap:
박형윤: U03L21XV6LE
이동명: U05A94D57RS
심재진: U03L8HZCN75
이미영: U04H7HMV4R2
김시형: U03LYCJ1XU0
김가영: U050BN7EH8W
김낙운: U05DRP0N295
한희경: U03KU1YJUG7
false
2
https://gitlab.uhdcsre.com/app-developer/lgup-mcs-aos.git
bfd6fb6a-e36e-4d12-87a8-4c6ca93bc28b
*/${branch}
false
mac-mini-m2
false
false
false
false
false
# Load .zprofile if it exists
if [ -f ~/.zprofile ]; then
source ~/.zprofile
fi
# Load .bash_profile if it exists
if [ -f ~/.bash_profile ]; then
source ~/.bash_profile
fi
# Load .bashrc if it exists (optional)
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
# Load .zshrc if it exists (optional)
if [ -f ~/.zshrc ]; then
source ~/.zshrc
fi
echo $PATH
BASEDIR=$(dirname $0)
#echo "===> Script location: ${BASEDIR}"
#cd ${BASEDIR}/../../..
echo "===> Build Project Path: ${PWD}"
echo ${BUILD_USER}
echo ${BUILD_USER_ID}
oto exe -j
app/build/outputs/apk/mobileCS/lt/*.apk
false
false
false
true
true
false
xterm