Jenkins -- 自动化发布

87 阅读1分钟

登录 Jenkins ,新建 image.png

配置 Configure

image.png image.png

image.png

image.png

在项目下新建 Jenkinsfile

pipeline{
    agent any

    environment {
        PROJECT_PATH="xxx"
        TEST_URL="http://xxx:8090"

    }

    stages {
       stage('PREPARE') {
            steps {
                script {
                    env.LAST_STAGE_NAME = "$env.STAGE_NAME"
                    env.GIT_COMMIT_EMAIL=sh(script:"git --no-pager  show -s --format=%ae",returnStdout: true).trim()
                    env.GIT_COMMIT_AUTHOR=sh(script:"git --no-pager  show -s --format=%an",returnStdout: true).trim()
                    env.GIT_COMMIT_DATE=sh(script:"git --no-pager  show -s --format=%ad",returnStdout: true).trim()
                    env.PROJECT_URL=sh(script:"git --no-pager config --local remote.origin.url",returnStdout: true).trim()
                }
                sh '''#!/bin/bash
                source /root/.bashrc
                nvm use v16.13.0
                nvm alias default v16.13.0
                node --version
                '''
            }
       }

        stage("INSTALL"){
            steps{
                script {
                    env.LAST_STAGE_NAME = "$env.STAGE_NAME"
                }
                sh '''#!/bin/bash
                source /root/.bashrc
                node --version
                npm -v
                npm config get registry
                df -h
                ls "$PROJECT_PATH"
                npm --registry https://registry.npm.taobao.org install --legacy-peer-deps
                '''
            }
        }

        stage("BUILD"){
            steps{
                script {
                    env.LAST_STAGE_NAME = "$env.STAGE_NAME"
                }
                sh '''#!/bin/bash
                source /root/.bashrc
                node --version
                npm -v
                npm run build:testnet
                '''
            }
        }

        stage("UPLOAD"){
            steps{
               script {
                    env.LAST_STAGE_NAME = "$env.STAGE_NAME"
                }
                sh '''#!/bin/bash
                tar -czvf build.tar.gz build
                ansible 192.168.1.xx -m copy -a "src=/home/data/jenkins/workspace/$JOB_BASE_NAME/build.tar.gz dest=/root/web/xxx.web/build.tar.gz mode=0777"
                ansible 192.168.1.xx -m shell -a "cd /root/web/xxx.web && tar -xzvf build.tar.gz"
                '''
            }
        }

        stage("RESET"){
            steps{
                script {
                    env.LAST_STAGE_NAME = "$env.STAGE_NAME"
                }
                sh '''#!/bin/bash
                source /root/.bashrc
                nvm use system
                nvm alias default system
                ansible 192.168.1.xx -m shell -a "cd /root/web/xxx.web && rm -rf build.tar.gz"
                rm -rf "$PROJECT_PATH/node_modules"  "$PROJECT_PATH/package-lock.json"
                '''
            }
        }
    }

    post {
        always {
            script {

                sh """
                curl 'https://oapi.dingtalk.com/robot/send?access_token=access_token' \
                -H 'Content-Type: application/json' \
                -d '{
                        "markdown": {
                            "title": "${JOB_BASE_NAME}",
                            "text": " - 工程: ${JOB_BASE_NAME} \n - 邮箱: ${env.GIT_COMMIT_EMAIL} \n - Name: ${env.GIT_COMMIT_AUTHOR} \n - STAGE: ${env.LAST_STAGE_NAME} \n - [JENKINS_URL](${env.BUILD_URL}) \n - ${env.PROJECT_URL} \n - [TEST_URL](${TEST_URL}) \n"
                        },
                        "msgtype":"markdown"
                    }'
                """
            }
        }
    }
}

在gitlab>settings>integrations>add Webhooks,

image.png