通過Jenkins自動化構(gòu)建VUE前端項(xiàng)目

Jenkins奴隸機(jī)配置

  • 首先登錄奴隸機(jī),確保奴隸機(jī)有JDK,沒有則下載解壓JDK。下面簡單描述下安裝JDK過程
    • ORACLE官網(wǎng)下載個(gè)JDK,比如jdk-8u241-linux-x64.tar.gz
    • 挪到想要的路徑下,比如/home/: mv jdk-8u241-linux-x64.tar.gz /home/
    • 解壓: tar -zxvf jdk-8u241-linux-x64.tar.gz
    • 至此,JDK就放在/home/jdk1.8.0_241/
    • 配置bin: cd /usr/bin/ & ln -s /home/jdk1.8.0_241/bin/java
    • 測試下是否正確配置: java -version,如下則正常


      image.png
  • 登錄Jenkins,在Jenkins首頁:Manage Jenkins -> Manage Nodes and Clouds,進(jìn)入到節(jié)點(diǎn)配置界面
    image.png
  • 然后點(diǎn)擊新建節(jié)點(diǎn),配置信息,其中啟動方式要改成Launch agents via SSH
    image.png
  • 保存后,Master就會開始嘗試連接奴隸機(jī),此時(shí)會報(bào)錯(cuò),提示沒有奴隸機(jī)的ssh指紋信息,可以如下解決:
    • 登錄Master所在機(jī)器A,通過A去登錄奴隸機(jī)所在機(jī)器B
    • 注意因?yàn)镴enkins使用Docker部署的,因此Master所在機(jī)器在Docker Container內(nèi),進(jìn)去使用:docker exec -it xxx bash
    • 然后ssh一次:ssh root@B
    • 這樣A的know_hosts里面就有B的指紋信息了
  • 在重啟代理嘗試連接奴隸機(jī),成功后如圖


    image.png

創(chuàng)建Jenkins自動化構(gòu)建任務(wù)

  • 首先創(chuàng)建一個(gè)用于登錄Gitlab的憑證
    • Manage Jenkins -> Manage Credentials

    • 添加憑據(jù)

      image.png

    • 創(chuàng)建完畢后,記得復(fù)制憑證id,用于編寫流水線時(shí)要用到

  • 插件管理,搜索DingTalk插件,安裝重啟Jenkins
    • 這邊是DingTalk插件使用說明,傳送門
  • 插件管理,搜索NodeJS插件,安裝重啟Jenkins
  • 然后到全局工具配置,NodeJS新增,填寫名字,選擇版本
  • 首頁->新建item,進(jìn)入任務(wù)創(chuàng)建頁
  • 填入名字,選擇流水線,開始填寫流水線腳本
pipeline {
    agent {
        label '226.243'
    }
    stages {
        stage('Preparation') {
            steps {
              git branch: 'develop', credentialsId: 'Gitlab-Jenkins', url: 'http://192.168.1.1/xxxxx.git'       
            }
        }
        stage('Clean') {
            steps {
                sh'''
                    touch pid
                    pid=`cat pid`
                    if [ -n "$pid" ]
                    then 
                        echo "kill pid"
                        kill -9 $pid 2>&1
                    else
                        echo "application is already stopped"
                    fi
                    rm -rf dist/
                '''     
            }
        }
        stage('Build') {
            steps{
                script {
                    nodeHome = tool 'NodeJS10_24'
                }
                withEnv(["NODE_HOME=$nodeHome"]) {
                     sh'''
                        export JENKINS_NODE_COOKIE=dontKillMe
                        export PATH=$PATH:$NODE_HOME/bin
                        $NODE_HOME/bin/npm i -g http-server
                        $NODE_HOME/bin/npm install
                        $NODE_HOME/bin/npm run build:prod
                        cd dist
                        nohup $NODE_HOME/bin/http-server -p 9009 > ../run_log.out 2>&1 &
                        echo "$!" > ../pid
                    '''
                }
            }
        }
    }
    post { 
        always { 
          echo 'always'
        } 
        success { 
            // 當(dāng)此Pipeline成功時(shí)打印消息 
            echo 'success' 
            dingtalk (
                        robot: 'robot1',
                        type: 'LINK',
                        title: '前端構(gòu)建成功',
                        text: [
                            '點(diǎn)擊直接跳轉(zhuǎn)到頁面'
                        ],
                        messageUrl: 'http://xxxx.com',
                        picUrl: 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic.51yuansu.com%2Fpic2%2Fcover%2F00%2F44%2F98%2F5814c9627afc2_610.jpg&refer=http%3A%2F%2Fpic.51yuansu.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1619152494&t=4eb45fe7198c51f8bf54968f5dcc75d1'
                    )
        } 
        failure { 
            //當(dāng)此Pipeline失敗時(shí)打印消息
            echo 'failure'
            dingtalk (
                        robot: 'robot1',
                        type: 'TEXT',
                        text: [
                            '前端構(gòu)建失敗'
                        ]
                    )
        } 
        unstable { 
            //當(dāng)此Pipeline 為不穩(wěn)定時(shí)打印消息 
            echo 'unstable'         
        } 
        aborted { 
            //當(dāng)此Pipeline 終止時(shí)打印消息
            echo 'aborted'
            dingtalk (
                        robot: 'robot1',
                        type: 'TEXT',
                        text: [
                            '前端構(gòu)建被終止'
                        ]
                    )
        } 
        changed { 
            //當(dāng)pipeline的狀態(tài)與上一次build狀態(tài)不同時(shí)打印消息 
            echo 'changed'             
        }         
    }
}

配置自動觸發(fā)

  • 插件管理中搜索Gitlab,安裝Gitlab觸發(fā)器
  • 然后到item中觸發(fā)器就會多出一個(gè)Build when a change is pushed to GitLab. GitLab webhook URL:xxxx
  • 將URL復(fù)制到Gitlab項(xiàng)目中,通過Setting->Webhook添加該url和token.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容