// jenkinsfile reference
pipeline {
    agent any

    stages {
        // Pull code
        stage('Gitlab Pull') {
            steps {
                // credentialsId ,url: set the value based on the actual situation
                git branch:'main',credentialsId: '62KJGFbf-0041-4GEa-aDee-1212d7b738ee', poll: false, url: 'git@gitlab2.taobao.com:uat/aiotest_tb.git'
            }
        }
        // Distribute code to individual hosts
        stage('SSH Server') {
            steps {
                sshPublisher(
                    publishers: [
                        sshPublisherDesc(
                            configName: '192.168.0.10', 
                            sshCredentials: [
                                encryptedPassphrase: '{AQADFGGTREW34UHJGT5438Wde4iaoCRU=}', 
                                key: '', 
                                keyPath: '', 
                                username: 'root'
                            ], 
                            transfers: [
                                sshTransfer(
                                    cleanRemote: false, 
                                    excludes: '', 
                                    execCommand: '''ls
                                                    cd aiotest_tb
                                                    chmod -R 777 ./*''', 
                                    execTimeout: 300000, 
                                    flatten: false, 
                                    makeEmptyDirs: false, 
                                    noDefaultExcludes: false, 
                                    patternSeparator: '[, ]+', 
                                    remoteDirectory: 'aiotest_tb', 
                                    remoteDirectorySDF: false, 
                                    removePrefix: '', 
                                    sourceFiles: '**'
                                )
                            ], 
                            usePromotionTimestamp: false, 
                            useWorkspaceInPromotion: false, 
                            verbose: false
                        ),
                        sshPublisherDesc(
                            configName: '192.168.0.11', 
                            sshCredentials: [
                                encryptedPassphrase: '{AQADFGGTREW34UHJGT5438Wde4iaoCRU=}', 
                                key: '', 
                                keyPath: '', 
                                username: 'root'
                            ], 
                            transfers: [
                                sshTransfer(
                                    cleanRemote: false, 
                                    excludes: '', 
                                    execCommand: '''ls
                                                    cd aiotest_tb
                                                    chmod -R 777 ./*''', 
                                    execTimeout: 300000, 
                                    flatten: false, 
                                    makeEmptyDirs: false, 
                                    noDefaultExcludes: false, 
                                    patternSeparator: '[, ]+', 
                                    remoteDirectory: 'aiotest_tb', 
                                    remoteDirectorySDF: false, 
                                    removePrefix: '', 
                                    sourceFiles: '**'
                                )
                            ], 
                            usePromotionTimestamp: false, 
                            useWorkspaceInPromotion: false, 
                            verbose: false
                        ),
                        sshPublisherDesc(
                            configName: '192.168.0.12', 
                            sshCredentials: [
                                encryptedPassphrase: '{AQADFGGTREW34UHJGT5438Wde4iaoCRU=}', 
                                key: '', 
                                keyPath: '', 
                                username: 'root'
                            ], 
                            transfers: [
                                sshTransfer(
                                    cleanRemote: false, 
                                    excludes: '', 
                                    execCommand: '''ls
                                                    cd aiotest_tb
                                                    chmod -R 777 ./*''', 
                                    execTimeout: 300000, 
                                    flatten: false, 
                                    makeEmptyDirs: false, 
                                    noDefaultExcludes: false, 
                                    patternSeparator: '[, ]+', 
                                    remoteDirectory: 'aiotest_tb', 
                                    remoteDirectorySDF: false, 
                                    removePrefix: '', 
                                    sourceFiles: '**'
                                )
                            ], 
                            usePromotionTimestamp: false, 
                            useWorkspaceInPromotion: false, 
                            verbose: false
                        ),
                        sshPublisherDesc(
                            configName: '192.168.0.13', 
                            sshCredentials: [
                                encryptedPassphrase: '{AQADFGGTREW34UHJGT5438Wde4iaoCRU=}', 
                                key: '', 
                                keyPath: '', 
                                username: 'root'
                            ], 
                            transfers: [
                                sshTransfer(
                                    cleanRemote: false, 
                                    excludes: '', 
                                    execCommand: '''ls
                                                    cd aiotest_tb
                                                    chmod -R 777 ./*''', 
                                    execTimeout: 300000, 
                                    flatten: false, 
                                    makeEmptyDirs: false, 
                                    noDefaultExcludes: false, 
                                    patternSeparator: '[, ]+', 
                                    remoteDirectory: 'aiotest_tb', 
                                    remoteDirectorySDF: false, 
                                    removePrefix: '', 
                                    sourceFiles: '**'
                                )
                            ], 
                            usePromotionTimestamp: false, 
                            useWorkspaceInPromotion: false, 
                            verbose: false
                        ),
                        sshPublisherDesc(
                            configName: '192.168.0.14', 
                            sshCredentials: [
                                encryptedPassphrase: '{AQADFGGTREW34UHJGT5438Wde4iaoCRU=}', 
                                key: '', 
                                keyPath: '', 
                                username: 'root'
                            ], 
                            transfers: [
                                sshTransfer(
                                    cleanRemote: false, 
                                    excludes: '', 
                                    execCommand: '''ls
                                                    cd aiotest_tb
                                                    chmod -R 777 ./*''', 
                                    execTimeout: 300000, 
                                    flatten: false, 
                                    makeEmptyDirs: false, 
                                    noDefaultExcludes: false, 
                                    patternSeparator: '[, ]+', 
                                    remoteDirectory: 'aiotest_tb', 
                                    remoteDirectorySDF: false, 
                                    removePrefix: '', 
                                    sourceFiles: '**'
                                )
                            ], 
                            usePromotionTimestamp: false, 
                            useWorkspaceInPromotion: false, 
                            verbose: false
                        )
                    ]
                )
            }
        }
        // Start distributed stress testing
        stage('Aiotest Runner') {
            steps {
                sshPublisher(
                    publishers: [
                        sshPublisherDesc(
                            configName: '192.168.0.10', 
                            sshCredentials: [
                                encryptedPassphrase: '{AQADFGGTREW34UHJGT5438Wde4iaoCRU=}', 
                                key: '', 
                                keyPath: '', 
                                username: 'root'
                            ], 
                            transfers: [
                                sshTransfer(
                                    cleanRemote: false, 
                                    excludes: '', 
                                    execCommand: '''ls
                                                    cd aiotest_tb
                                                    docker-compose -f docker-compose-master.yml up -d''', 
                                    execTimeout: 300000, 
                                    flatten: false, 
                                    makeEmptyDirs: false, 
                                    noDefaultExcludes: false, 
                                    patternSeparator: '[, ]+', 
                                    remoteDirectory: '', 
                                    remoteDirectorySDF: false, 
                                    removePrefix: '', 
                                    sourceFiles: ''
                                )
                            ], 
                            usePromotionTimestamp: false, 
                            useWorkspaceInPromotion: false, 
                            verbose: true
                        ),
                        sshPublisherDesc(
                            configName: '192.168.0.11', 
                            sshCredentials: [
                                encryptedPassphrase: '{AQADFGGTREW34UHJGT5438Wde4iaoCRU=}', 
                                key: '', 
                                keyPath: '', 
                                username: 'root'
                            ], 
                            transfers: [
                                sshTransfer(
                                    cleanRemote: false, 
                                    excludes: '', 
                                    execCommand: '''ls
                                                    cd aiotest_tb
                                                    docker-compose -f docker-compose-worker.yml up -d --scale worker=4''', 
                                    execTimeout: 300000, 
                                    flatten: false, 
                                    makeEmptyDirs: false, 
                                    noDefaultExcludes: false, 
                                    patternSeparator: '[, ]+', 
                                    remoteDirectory: '', 
                                    remoteDirectorySDF: false, 
                                    removePrefix: '', 
                                    sourceFiles: ''
                                )
                            ], 
                            usePromotionTimestamp: false, 
                            useWorkspaceInPromotion: false, 
                            verbose: true
                        ),
                        sshPublisherDesc(
                            configName: '192.168.0.12', 
                            sshCredentials: [
                                encryptedPassphrase: '{AQADFGGTREW34UHJGT5438Wde4iaoCRU=}', 
                                key: '', 
                                keyPath: '', 
                                username: 'root'
                            ], 
                            transfers: [
                                sshTransfer(
                                    cleanRemote: false, 
                                    excludes: '', 
                                    execCommand: '''ls
                                                    cd aiotest_tb
                                                    docker-compose -f docker-compose-worker.yml up -d --scale worker=4''', 
                                    execTimeout: 300000, 
                                    flatten: false, 
                                    makeEmptyDirs: false, 
                                    noDefaultExcludes: false, 
                                    patternSeparator: '[, ]+', 
                                    remoteDirectory: '', 
                                    remoteDirectorySDF: false, 
                                    removePrefix: '', 
                                    sourceFiles: ''
                                )
                            ], 
                            usePromotionTimestamp: false, 
                            useWorkspaceInPromotion: false, 
                            verbose: true
                        ),
                        sshPublisherDesc(
                            configName: '192.168.0.13', 
                            sshCredentials: [
                                encryptedPassphrase: '{AQADFGGTREW34UHJGT5438Wde4iaoCRU=}', 
                                key: '', 
                                keyPath: '', 
                                username: 'root'
                            ], 
                            transfers: [
                                sshTransfer(
                                    cleanRemote: false, 
                                    excludes: '', 
                                    execCommand: '''ls
                                                    cd aiotest_tb
                                                    docker-compose -f docker-compose-worker.yml up -d --scale worker=4''', 
                                    execTimeout: 300000, 
                                    flatten: false, 
                                    makeEmptyDirs: false, 
                                    noDefaultExcludes: false, 
                                    patternSeparator: '[, ]+', 
                                    remoteDirectory: '', 
                                    remoteDirectorySDF: false, 
                                    removePrefix: '', 
                                    sourceFiles: ''
                                )
                            ], 
                            usePromotionTimestamp: false, 
                            useWorkspaceInPromotion: false, 
                            verbose: true
                        ),
                        sshPublisherDesc(
                            configName: '192.168.0.14', 
                            sshCredentials: [
                                encryptedPassphrase: '{AQADFGGTREW34UHJGT5438Wde4iaoCRU=}', 
                                key: '', 
                                keyPath: '', 
                                username: 'root'
                            ], 
                            transfers: [
                                sshTransfer(
                                    cleanRemote: false, 
                                    excludes: '', 
                                    execCommand: '''ls
                                                    cd aiotest_tb
                                                    docker-compose -f docker-compose-worker.yml up -d --scale worker=4''', 
                                    execTimeout: 300000, 
                                    flatten: false, 
                                    makeEmptyDirs: false, 
                                    noDefaultExcludes: false, 
                                    patternSeparator: '[, ]+', 
                                    remoteDirectory: '', 
                                    remoteDirectorySDF: false, 
                                    removePrefix: '', 
                                    sourceFiles: ''
                                )
                            ], 
                            usePromotionTimestamp: false, 
                            useWorkspaceInPromotion: false, 
                            verbose: true
                        )
                    ]
                )
            }
        }
    }
}