빌드 가이드 문서 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