8

Tôi đang gặp phải sự cố với đường ống Jenkins trong Jenkinsfile. Tôi có 4 phiên bản nodeJ khác nhau trên phiên bản Jenkins của tôi. Tôi muốn chọn cái nào tôi sẽ sử dụng trong đường ống của mình, nhưng các ví dụ về plugin chính thức (https://wiki.jenkins-ci.org/display/JENKINS/NodeJS+Plugin) chỉ đơn giản là không hoạt động.Đường dẫn Jenkins: chọn phiên bản nodejs (+ phiên bản python)

Tôi đã thử cách tiếp cận đầu tiên này, không thành công vì $ PATH bị ghi đè bởi phần tools.

pipeline { 
    agent any 

    tools { 
     // I hoped it would work with this command... 
     nodejs 'nodejs6' 
    } 

    stages { 
     stage('Example') { 
      steps { 
       sh 'npm --version' 
       // Failed saying : 
       // Running shell script 
       //nohup: failed to run command 'sh': No such file or directory 
      } 
     } 
    } 
} 

Tôi đã thử phương pháp thứ hai này, không thành công vì lệnh tool dường như chẳng làm gì cả.

pipeline { 
    agent any 

    stages { 
     stage('Example') { 
      steps { 
       // ... or this one 
       tool name: 'nodejs6' 

       sh 'node --version' 
       sh 'npm --version' 
       // Does not use this version of node, but the default one... 7.5.0 with npm 4.3.0 
      } 
     } 
    } 
} 

Cuối cùng, tôi đã cố gắng thế này, mà làm việc cho NodeJS nhưng ... dường như không phải là "rất thông minh", và không cho phép tôi để xử lý đúng đắn phiên bản cụ thể của tôi "Python" --Yes tôi cũng có 2 phiên bản khác nhau của Python mà tôi muốn để xử lý theo cùng một cách tôi làm cho node--

pipeline { 
    agent any 

    stages{ 
     stage ('Which NodeJS'){ 
      steps{ 
       withEnv(["PATH+NODEJS=${tool 'nodejs6'}/bin","PATH+PYTHON27=${tool 'python27'}"]) { 
        // Check node version 
        sh 'which node' // Works properly 
        sh 'node -v' // Expected 6.9.x version 
        sh 'npm -v' // Expected 3.x version 
        sh 'python27 -v' 
        // Failed with 
        // /[email protected]/xx/script.sh: python27: not found 
       } 
      } 
     } 
    } 
} 

tôi cũng có một giải pháp thứ 4, không sử dụng pipeline cú pháp. Nó hoạt động cho nodejs, nhưng không phải cho python (cho đến nay). Và một lần nữa, nó không có vẻ rất thanh lịch để tự xác định env.PATH ...

node { 
    // Setup tools... 
    stage ('Setup NodeJs'){ 
     def nodejsHome = tool 'nodejs6' 
     env.NODE_HOME = "${nodejsHome}" 
     env.PATH = "${nodejsHome}/bin:${env.PATH}" 
     sh 'which node' 
     sh 'node -v' 
     sh 'npm -v' 
    } 

    stage ('Setup Python 2.7'){ 
     def pythonBin = tool 'python27' 
     // Jenkins docker image has Jenkins user's home in "/var/jenkins_home" 
     sh "rm -Rf /var/jenkins_home/tools/python ; mkdir -p /var/jenkins_home/tools/python" 
     // Link python to python 2.7 
     sh "ln -s ${pythonBin} /var/jenkins_home/tools/python/python" 
     // Include link in path --don't use "~" in path, it won't be resolved 
     env.PATH = "~/tools/python:${env.PATH}:~/tools/python" 
     // Displays correctly Python 2.7 
     sh "python --version" 
    } 
} 

Tất cả trong tất cả, tôi chỉ tự hỏi mà giải pháp (chắc chắn một số khác mà tôi đã không được liệt kê ở đây) là tốt nhất? Bạn sẽ tư vấn cho ai và tại sao?

Chúc mừng, Olivier

+0

Xin chào, tôi hiện đang xử lý sự cố tương tự. Bạn đã bao giờ tìm ra thứ gì khác chưa? – BumbleShrimp

+0

Xin chào. Thật không may tôi thép không có một giải pháp tốt hơn so với một ở trên. Tôi đã mở một vé trên plugin: https://issues.jenkins-ci.org/browse/JENKINS-43066 – Olivier

Trả lời

1

So. Đây là sự cố từ plugin "EnvInject": https://issues.jenkins-ci.org/browse/JENKINS-26583

Giải pháp thay thế 4 của tôi ở trên là giải pháp đúng nếu bạn muốn giữ EnvInject.

env.NODE_HOME="${tool 'Node 6.x'}" 
env.PATH="${env.NODE_HOME}/bin:${env.PATH}" 
sh 'npm -version' 

Nếu không, hãy xóa plugin EnvInject cũng là một giải pháp tốt khi có thể.

Các vấn đề liên quan