【问题标题】:Bundle install really slow on Jenkins Pipeline (AWS EC2 Instance)捆绑安装在 Jenkins 管道上真的很慢(AWS EC2 实例)
【发布时间】:2021-12-31 04:22:49
【问题描述】:

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

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

这是我的代码:

    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/)。但它也不起作用。

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

【问题讨论】:

  • 是否有任何 jenkins 作业日志导致更具体的上下文,例如无法连接捆绑包并且正在重试安装或构建作业的类似内容?

标签: ruby-on-rails ruby jenkins amazon-ec2 bundle


【解决方案1】:

解决了这个问题:

  1. 使用 Java 和 Jenkins 创建主服务器
  2. 使用 Java、Git 和 Docker 创建从属服务器(称为“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'
            }
        }
    }
}

希望对有需要的人有所帮助!

【讨论】:

    【解决方案2】:

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

    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'
            }
        }
    

    【讨论】:

    • 谢谢!我试了一下,报错了。稍微改一下sh 'echo gem: --no-document > ~/.gemrc' 就可以了!必须尝试在 master 上运行整个东西才能知道它是否 100% 有效。即使这样,我认为最好在从属之间分配工作量
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    • 2020-10-02
    • 2015-09-14
    • 2016-08-21
    • 2020-10-16
    • 2023-03-17
    相关资源
    最近更新 更多