jenkins打包發布前端項目


node項目構建

    1.把npm變成cnpm

       

    2.使用cnpm進行構建打包

       sh  "cd /var/lib/jenkins/workspace/sdc-h5"
       sh  "cnpm config set strict-ssl false"
       sh  "cnpm install node-sass --unsafe-perm --save-dev"
       sh  "cnpm install"
       sh  "cnpm run build:sit"

 ansible安裝配置

       1.配置免密登錄 在ansible主機上使用普通用戶創建公私鑰即可,不一定要使用管理員用戶 

         1.[jenkins@localhost ~]$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
         2.[jenkins@localhost ~]$ ssh-copy-id -i .ssh/id_rsa.pub admin@192.168.30.98

            

        3.ansible建立ssh免密的時候必須選用合適的用戶 服務端主機上和客戶端主機上必須存在同樣的用戶才行

           ansible主機上存在jenkins普通用戶 但是遠程主機上沒有jenkins用戶,執行ansible命令的時候是以jenkins用戶遠程連接的所以會出現連接異常

            

       4.在ansible主機上從jenkins用戶切換到admin用戶,然后重新生成公私密鑰即可

       5.在執行ansible命令的時候指定遠程連接用戶

          ansible webservers --user=admin -m ping

          

發布項目流程

    ansible webservers --user=admin -m copy -a "src=/var/lib/jenkins/workspace/sdc-h5/dist/* dest=/home/admin/testh5/"
    copy模塊用於將本地或遠程機器上的文件拷貝到遠程主機上
    拷貝前備份  backup=yes
    src是目錄時
        源目錄以/結尾,只拷貝了目錄下的內容
        源目錄未以/結尾,直接將src目錄本身拷貝到目的地
    src和dest都是文件,若dest的文件的父目錄不存在將報錯

   

 Pipeline依次執行指令

         1.獲取命令執行是否成功             excuteCode = sh(script: "<shell command>", returnStatus: true)    

         2.獲取命令執行的輸出內容          result = sh(script: "<shell command>", returnStdout: true)

 stage("Deploy"){
           steps {
              script {
                sh "ansible webservers  --user=admin -m copy -a 'src=/var/lib/jenkins/workspace/AppServiceProject/register-center/target/register-center.jar dest=/home/admin/app/'"
                sh "ansible webservers  --user=admin -m copy -a 'src=/var/lib/jenkins/workspace/AppServiceProject/config-center/target/config-center.jar dest=/home/admin/app/'"
                sh "ansible webservers  --user=admin -m copy -a 'src=/var/lib/jenkins/workspace/AppServiceProject/gateway-zuul/target/gateway-zuul.jar dest=/home/admin/app/'"
                sh "ansible webservers  --user=admin -m copy -a 'src=/var/lib/jenkins/workspace/AppServiceProject/admin/target/admin.jar dest=/home/admin/app/'"
                sh "ansible webservers  --user=admin -m copy -a 'src=/var/lib/jenkins/workspace/AppServiceProject/bizapp/sdc-collect-config/target/sdc-collect-config-0.0.1-SNAPSHOT.jar dest=/home/admin/app/'"
                sh "ansible webservers  --user=admin -m copy -a 'src=/var/lib/jenkins/workspace/AppServiceProject/bizapp/sdc-rule-config/target/sdc-rule-config-1.0-SNAPSHOT.jar dest=/home/admin/app/'"
                sh "ansible webservers  --user=admin -m copy -a 'src=/var/lib/jenkins/workspace/AppServiceProject/bizapp/sdc-es-service/target/sdc-es-service.jar dest=/home/admin/app/'"
              }
           }
           post {
              success {
                print("Deploy success......")
              }
           }
      }
      
      stage("Start"){
           steps {
              script {
              
                //sh "ansible webservers --user=admin -m shell -a '/home/admin/app/start-register.sh'"
                res = sh(script: "ansible webservers --user=admin -m shell -a '/home/admin/app/start-register.sh'", returnStdout: true)
                if (res.contains("Start Fail")){
                      error("register服務啟動失敗,本次發布流程終止")
                }
               
                //sh "ansible webservers --user=admin -m shell -a '/home/admin/app/start-config.sh'"
                res = sh(script: "ansible webservers --user=admin -m shell -a '/home/admin/app/start-config.sh'", returnStdout: true)
                 if (res.contains("Start Fail")){
                      error("config服務啟動失敗,本次發布流程終止")
                }
                
                //sh "ansible webservers --user=admin -m shell -a '/home/admin/app/start-gateway.sh'"
                res = sh(script: "ansible webservers --user=admin -m shell -a '/home/admin/app/start-gateway.sh'", returnStdout: true)
                 if (res.contains("Start Fail")){
                      error("gateway服務啟動失敗,本次發布流程終止")
                }
                
                //sh "ansible webservers --user=admin -m shell -a '/home/admin/app/start-admin.sh'"
                 res = sh(script: "ansible webservers --user=admin -m shell -a '/home/admin/app/start-admin.sh'", returnStdout: true)
                 if (res.contains("Start Fail")){
                      error("admin服務啟動失敗,本次發布流程終止")
                 }
                
                //sh "ansible webservers --user=admin -m shell -a '/home/admin/app/start-sdccollectconfig.sh'"
                 res=sh(script: "ansible webservers --user=admin -m shell -a '/home/admin/app/start-sdccollectconfig.sh'", returnStdout: true)
                 if (res.contains("Start Fail")){
                      error("sdc-collect-config服務啟動失敗,本次發布流程終止")
                 }
                
                //sh "ansible webservers --user=admin -m shell -a '/home/admin/app/start-sdcruleconfig.sh'"
                res=sh(script: "ansible webservers --user=admin -m shell -a '/home/admin/app/start-sdcruleconfig.sh'", returnStdout: true)
                if (res.contains("Start Fail")){
                      error("sdc-rule-config服務啟動失敗,本次發布流程終止")
                 }
                 
                //sh "ansible webservers --user=admin -m shell -a '/home/admin/app/start-es.sh'"
                res=sh(script: "ansible webservers --user=admin -m shell -a '/home/admin/app/start-es.sh'", returnStdout: true)
                if (res.contains("Start Fail")){
                      error("es服務啟動失敗,本次發布流程終止")
                 }
                
              }
           }
           post {
              success {
                print("所有應用啟動成功,本次流水線執行成功")
              }
           }
      }
流水線

 如果其中一條命令執行失敗,后面的指令就會中斷執行

錯誤排查

  1. name cannot start with an underscore; name can only contain URL-friendly characters

     原因分析:通過cnpm命令安裝模塊時,會同時生成帶下划線的文件(eg: _jquery@3.4.1@jquery),不符合命名規范(根據報錯提示)

     1.安裝模塊時用npm,非cnpm

     2.先通過npm init初始化目錄,生成包管理文件package.json,再安裝模塊(npm/cnpm)

  2.如何指定`package.json`的npm的路徑

      cnpm run build:sit -config=/var/lib/jenkins/workspace/netcehui-h52/h5-new/package.json

     

      打包成功發布

npm編譯異常

       1.安裝nodejs第三方模塊權限不足,提示創建node_modules下的文件夾權限不足

           npm install --unsafe-perm  使用非安全模式提升操作權限

       2.安裝nodejs第三方模塊一直處於卡死狀態

          使用國內源cnpm

           cnpm install --unsafe-perm

          cnpm install --registry=https://registry.npm.taobao.org
          cnpm install node-sass --unsafe-perm --save-dev
          cnpm run build:${PROFILE}

       

       

       用npm install 和npm run build打包失敗 

       改成cnpm install 和cnpm run build打包成功

      

      3.npm ERR! Maximum call stack size exceeded

     

     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM