/**
* Jenkinsfile 示例代码
* 拷贝使用要记得修改agent和steps内执行项目
*/
pipeline {
    agent none
    stages {
        // 生产
        stage('prod build') {
            // 当分支为master的时候执行
            when {
                branch 'master'
            }

            // 自动构建项目根目录下的 Dockerfile 文件,并使用其为运行容器
            agent { dockerfile true } // agent要放在when后,否则依旧会运行一次docker

            // 一些额外的选项
            options {
                // 失败则重试三次
                retry(3)
            }
            
            steps {
                // 在容器中执行 shell
                sh 'composer'
                // 在jenkins输出中打印信息
                echo '一些有用的信息'
            }
        }
        // 测试环境
        stage('test build') {
            when {
                branch 'test'
            }

            // 使用 docker 镜像 php:7.4-cli 为运行容器
            agent { docker 'php:7.4-cli' }

            steps {
                sh 'php --version'
            }
        }
        // 生产环境
        stage('dev build') {
            when {
                branch 'dev'
            }

            // 在标签为 'test80' 的服务器上执行,可以与 docker 等组合使用
            agent {
                lable: 'test80'
                docker {
                    image {
                       id: 'php:7.4-cli' 
                       withRun: '-d -p 13333:8080 -d -w /usr/src/app -v $PWD:/usr/src/app' // run 参数
                    }
                }
            }
            /*
            agent {
                docker {
                    image 'php:8.2-cli'
                    lable: 'develop-server' // 在lable为xxx的节点对应docker容器运行
                    args: ' --verbose' // 额外的docker参数
                }
            }
             */

            steps {
                sh 'cat ./file_need_to_merge'
            }
        }
        // 没有when也就是任意时候都会执行
        stage('after build') {
            agent any // 在任何可用的代理上执行流水线或阶段,没有多节点的情况下其实就是直接执行shell啦。。
            /*
            agent { lable: 'maybe-server' } // 在lable为xxx的节点上运行
             */

            steps {
                echo 'Always excecute after other stages.'
            }
        }
    }
    // 根据执行结果执行
    post {
        // 失败
        failure {
            echo 'FAILURE MESSAGE'
        }
        // 成功
        success {
            echo 'SUCCESS MESSAGE'
        }
    }
}