如何为 Jenkinsfile 管道语法启用 Yarn?

Kwh*_*ejr 2 jenkins jenkins-pipeline yarnpkg

尝试使用 Jenkinsfile 和 Pipeline 声明性语法在 Jenkins 2 上设置一个简单的单元测试运行程序。下面的示例几乎有效,但我想使用yarn而不是npm.

詹金斯档案

#!groovy

pipeline {
  agent any

  tools {nodejs 'node-8.10.0'} // previously configured via Manage Jenkins -> Global Tool Configuration

  stages {
    stage('Unit') {
      steps {
        checkout scm
        sh 'node -v' // 8.10.0
        sh 'npm -v' // 5.6.0
        sh 'npm install' // <-- desired change: 'yarn install'
        sh 'npm run test:unit' // <-- desired change: 'yarn test:unit'
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

奖金问题:checkout scm真的需要吗?添加它似乎会导致它运行两次。

Sal*_*Din 5

您可以yarn在节点工具配置中设置为可安装的依赖项: 在此处输入图片说明

定义好NodeJS工具后,就可以声明要安装哪些全局包了。

您可以在“管理 Jenkins”部分的“全局工具配置”菜单中找到它。

每次构建管道时,该工具都会提供一个安装了yarnNodeJS环境。


msz*_*ach 4

据我所知,Jenkins 没有yarn 插件。因此,没有可以在管道中轻松使用并负责纱线安装的纱线工具。

所以这里还有一些其他的可能性:

您可以在 Jenkins 本地安装 Yarn 并sh 'yarn install'在管道中使用。有关如何安装它的可能选项列表,请参阅https://yarnpkg.com/en/docs/install#alternatives-stable 。有些步骤可以轻松地在管道中编写脚本,就像curl解决方案一样。

或者您可以通过管道中提供的 npm 安装纱线:

sh "npm install -g yarn"
sh "yarn install"
Run Code Online (Sandbox Code Playgroud)

或者,如果您使用 Java 和 Maven,您可以使用frontend-maven-plugin 通过 Maven (管道中有一个工具博客)安装纱线,然后通过此插件使用安装的纱线。

在 docker 容器内构建,节点容器已安装纱线

pipeline {
agent {
    docker { image 'node:8.11' }
}
stages {
    stage('Test') {
        steps {
            sh 'yarn install'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

}

正如您所观察到的,结帐是多余的。声明性管道将在您的步骤之前在特殊的预处理步骤中检查代码和管道脚本。