" } } else { if (env.BUILD_FAIL_LOG_URL) { logLinks << "<${env.BUILD_FAIL_LOG_URL}|🧾 ${env.BUILD_NAME}_build.log>" } if (env.BUILD_FASTLANE_LOG_URL) { logLinks << "<${env.BUILD_FASTLANE_LOG_URL}|🛠️ ${env.BUILD_NAME}_fastlane_deploy.log>" } } if (logLinks) { fields << ["title": (status == "SUCCESS") ? "Artifacts" : "Logs", "value": logLinks.join("\n"), "short": false] } // 릴리스 승인 링크 추가 "> " } } else { if (env.BUILD_FAIL_LOG_URL) { logLinks << "<${env.BUILD_FAIL_LOG_URL}|🧾 ${env.BUILD_NAME}_build.log>" } if (env.BUILD_FASTLANE_LOG_URL) { logLinks << "<${env.BUILD_FASTLANE_LOG_URL}|🛠️ ${env.BUILD_NAME}_fastlane_deploy.log>" } } if (logLinks) { fields << ["title": (status == "SUCCESS") ? "Artifacts" : "Logs", "value": logLinks.join("\n"), "short": false] } // 릴리스 승인 링크 추가 "> " } } else { if (env.BUILD_FAIL_LOG_URL) { logLinks << "<${env.BUILD_FAIL_LOG_URL}|🧾 ${env.BUILD_NAME}_build.log>" } if (env.BUILD_FASTLANE_LOG_URL) { logLinks << "<${env.BUILD_FASTLANE_LOG_URL}|🛠️ ${env.BUILD_NAME}_fastlane_deploy.log>" } } if (logLinks) { fields << ["title": (status == "SUCCESS") ? "Artifacts" : "Logs", "value": logLinks.join("\n"), "short": false] } // 릴리스 승인 링크 추가 ">

<aside> 📌

아래 두 값 Credentials Secret key로 등록 후 사용

def sendSlack(String status, String color) {
    def slackTitle = getSlackTitle(status)

    def fields = [
        ["title": "Project", "value": "${env.BUILD_PROJECT_NAME}", "short": true],
        ["title": "Branch", "value": "${params.BRANCH}", "short": true],
        ["title": "Job", "value": "${env.JOB_NAME} #${env.BUILD_NUMBER}", "short": true]
    ]

    def logLinks = []
    if (status == "SUCCESS") {
        if (env.BUILD_S3_URL) {
            logLinks << "<${env.BUILD_S3_URL}|📦 ${env.BUILD_NAME}.aab>"
        }
    } else {
        if (env.BUILD_FAIL_LOG_URL) {
            logLinks << "<${env.BUILD_FAIL_LOG_URL}|🧾 ${env.BUILD_NAME}_build.log>"
        }
        if (env.BUILD_FASTLANE_LOG_URL) {
            logLinks << "<${env.BUILD_FASTLANE_LOG_URL}|🛠️ ${env.BUILD_NAME}_fastlane_deploy.log>"
        }
    }

    if (logLinks) {
        fields << ["title": (status == "SUCCESS") ? "Artifacts" : "Logs", "value": logLinks.join("\n"), "short": false]
    }

    // 릴리스 승인 링크 추가
    if (status == "SUCCESS" && params.RELEASE_STATUS == 'draft') {
        withCredentials([
		        string(credentialsId: 'PLAYSTORE_DEVELOPER_ID', variable: 'DEV_ID'),  // 플레이스토어 개발자 ID
		        string(credentialsId: 'SE_PLAYSTORE_PROJECT_ID', variable: 'PRJ_ID')  // 플레이스토어 프로젝트 ID
        ]) {
            def releaseUrl = "<https://play.google.com/console/u/0/developers/${DEV_ID}/app/${PRJ_ID}/tracks/internal-testing?releaseType=defaultReleases>"
            fields << [
                "title": "릴리스 승인 페이지",
                "value": "<${releaseUrl}|Google Play Console로 이동하기>\n(내부 테스트 릴리즈 승인 필요)",
                "short": false
            ]
        }
    }

    def payload = [
        text: "${slackTitle}",
        attachments: [[color: "${color}", fields: fields]]
    ]

    def curlBody = groovy.json.JsonOutput.toJson(payload)

    withCredentials([string(credentialsId: 'TEST_SLACK_URL', variable: 'SLACK_URL')]) {
        sh """
            curl -X POST -H 'Content-type: application/json' --data '${curlBody}' "$SLACK_URL"
        """
    }
}