在 Jenkins Pipeline(AWS EC2 实例)上 Bundle 安装真的很慢

Bundle install really slow on Jenkins Pipeline (AWS EC2 Instance)

我是 AWS EC2 Linux 实例上的 运行 Jenkins,我正在尝试捆绑安装我在 GitHub 上的 rails 存储库所需的 gem。

这是我为测试而创建的新项目,但捆绑包需要几个小时,Jenkins 冻结,我需要重新启动服务器和 Jenkins,它最终没有完成安装 gem。

这是我的代码:

    pipeline {
    agent { docker { image 'ruby:2.6.6' } }
    stages {
        stage('Fetching Git') {

            steps {
                git credentialsId: 'user-key',
                    url: 'git@github.com:user/jenkins_project.git'
            }
        }
        stage('Build') {

            steps {
                sh 'gem install bundler'
                sh 'bundle install --jobs 4'
                sh 'RAILS_ENV=test rake db:migrate'
            }
        }
        stage('Test') {

            steps {
                sh 'RAILS_ENV=test bundle exec rspec --format RspecJunitFormatter --out result_spec.xml'
            }
        }
    }
}

我尝试做的是:

  1. 捆绑安装时使用--jobs(似乎不起作用)

  2. 启用时在 Gemfile 上使用 http 而不是 https

    来源'http://rubygems.org'

我知道这不安全。这似乎也不起作用。 3. 也试过这个:

echo 'export MAKE="make -j$(nproc)"' >> $home/.bash_profile
time MAKE="make --jobs 8" bundle install

从这里 (https://build.betterup.com/one-weird-trick-that-will-speed-up-your-bundle-install/)。但是也没用。

任何关于为什么会发生这种情况以及我该如何解决的想法都非常感谢!

通过以下方式解决此问题:

  1. 使用 Java & Jenkins
  2. 创建主服务器
  3. 使用 Java & Git & Docker
  4. 创建从属服务器(称为 'linux_slave')

代码应该是这样的:

pipeline {
    agent {
        docker {
            image 'ruby:2.6.6'
            label 'linux_slave'
        }
    }
    stages {
        stage('Fetching Git') {
            
            steps {
                git credentialsId: 'user-key',
                    url: 'git@github.com:user/jenkins_project.git'
            }
        }
        stage('Build') {
            steps {
                sh 'gem install bundler:2.0.1'
                sh 'bundle install'
                sh 'RAILS_ENV=test rake db:migrate'
            }
        }
    }
}

希望它能在某个时候帮助到有需要的人!

将此添加为 gem 安装之前的第一行,因为每个安装包的大小都会变小,因为没有随它下载文档

sh 'echo gem: --no-document > ~/.gemrc' 

我已经为 Travis 使用了它,它帮助了很多 我不完全确定 Jenkins 语法,但请尝试以下语法

        stage('Build') {

        steps {
            sh 'echo gem: --no-document > ~/.gemrc' 
            sh 'gem install bundler'
            sh 'bundle install --jobs 4'
            sh 'RAILS_ENV=test rake db:migrate'
        }
    }