• 对于注定会优秀的人来说,他所需要的,只是时间----博主
  • 手懒得,必受贫穷,手勤的,必得富足----《圣经》
  • 帮助别人,成就自己。愿君在本站能真正有所收获!
  • 如果你在本站中发现任何问题,欢迎留言指正!
  • 宝剑锋从磨砺出,梅花香自苦寒来!
  • 本站开启了防爆破关小黑屋机制,如果您是正常登录但被关进小黑屋,请联系站长解除!

<三十五>Jenkins-pipeline学习笔记–使用Jenkinsfile进行PHP,前端等类似项目的部署与回滚(五)

Jenkins eryajf 3周前 (09-28) 184°C 已收录 0个评论
本文预计阅读时间 9 分钟

PHP项目的发布实际上是超级简单的,无非就是将项目代码同步到远程主机的应用目录即可,实际生产中,有不少与此类似的同类项目,也都可以借鉴如下的思路。

因为配置比较简单了,这里就不再赘述,不清楚的同学可以参考这里:http://www.eryajf.net/3304.html

直奔主题,列出核心构建文件内容,前边文章看过,一些内容就比较熟悉了,这里就不重复介绍了,只说明一下值得注意的点。

pipeline {
    agent any
    environment {
            // 定义项目名称方便全局引用
        project     = "test-php"
        // 远程主机地址,这里只演示了一台,如果是多台,可以空格继续写,下边的部署嵌套个for循环即可
        remote_ip   = "192.168.0.1"
        remote_dir  = "/data/www/test-php"
    }
    options {
        timestamps()
        disableConcurrentBuilds()
        timeout(time: 10, unit: 'MINUTES')
        buildDiscarder(logRotator(numToKeepStr: '10'))
    }
    triggers{
        gitlab( triggerOnPush: true,
                triggerOnMergeRequest: true,
                branchFilterType: 'All',
                secretToken: "${env.git_token}")
    }
    // 这里使用参数化构建的方式,而没有使用input参数,下边会说明一下原因。
    parameters {
        choice(name: 'MODE', choices: ['deploy','rollback'], description: '请选择发布或者回滚?')
    }
    stages {
        stage('部署') {
            when {
                environment name: 'MODE',value: 'deploy'
            }
            steps {
                script {
                    try {
                        sh '''
                            ssh -p 10022 root@$remote_ip "mkdir -p /media/${project}"
                            rsync -avz -e 'ssh -p 34222' --exclude='Jenkinsfile' --delete ${WORKSPACE}/  root@$remote_ip:/media/${project}/${BUILD_ID}
                            ssh -p 10022 root@$remote_ip "rm -rf $remote_dir && ln -s /media/${project}/${BUILD_ID} $remote_dir"
                        '''
                    } catch(err) {
                        echo "${err}"
                    }
                }
            }
        }
        stage('回滚') {
            when {
                environment name: 'MODE',value: 'rollback'
            }
            steps {
                script {
                    try {
                        sh '''
                            last_success=$(ssh -p 10022 root@$remote_ip "ls -lt /media/${project} | sed -n '3p'" | awk '{print \$9}')
                            ssh -p 10022 root@$remote_ip "rm -rf $remote_dir && ln -s /media/${project}/${last_success} $remote_dir"

                        '''
                    } catch(err) {
                        echo "${err}"
                    }
                }
            }
        }
        stage('清理工作空间') {
            steps {
                echo '清理工作空间'
                cleanWs()
            }
        }
    }
    post {
        success {
            dingTalk accessToken:'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxx',
            imageUrl:'https://ae01.alicdn.com/kf/Hdfe28d2621434a1eb821ac6327b768e79.png',
            jenkinsUrl: "${env.JENKINS_URL}",
            message:'构建成功 ✅',
            notifyPeople:'李启龙'
        }
        failure {
            dingTalk accessToken:'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxx',
            imageUrl:'https://ae01.alicdn.com/kf/Hdfe28d2621434a1eb821ac6327b768e79.png',
            jenkinsUrl: "${env.JENKINS_URL}",
            message:'构建失败 ❌',
            notifyPeople:'李启龙'
        }
    }
}

原本打算通过input来定义部署与回滚的参数,又想结合when这种判断来进行,结果发现目前when支持的参数项还非常有限,因此这条路恐怕是不太好走了,而我又不太想用if的那种判断,于是只得将input参数化构建改成了常规的参数化构建。

配置中添加了push代码自动构建,比较方便,但是慎重直接在线上环境中引用自动构建功能,因为经我测试,尽管开启了参数化构建,那么默认触发之后,是自动选择部署的。

部署与回滚的方案参考了瓦力的软链的思路,这样回滚起来,似乎也变得相对简单了。

最后的通知功能,当然是交给熟悉的钉钉啦!


weinxin
扫码订阅本站,第一时间获得更新
微信扫描二维码,订阅我们网站的动态,另外不定时发送WordPress小技巧,你可以随时退订,欢迎订阅哦~

二丫讲梵 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明<三十五>Jenkins-pipeline学习笔记–使用Jenkinsfile进行PHP,前端等类似项目的部署与回滚(五)
喜欢 (0)
[如果想支持本站,可支付宝赞助]
分享 (0)
eryajf
关于作者:
学无止境,我愿意无止境学。书山有路,我愿意举身投火,淬炼成金!

您必须 登录 才能发表评论!