捆绑安装在 Jenkins 管道上真的很慢(AWS EC2 实例)

Posted

技术标签:

【中文标题】捆绑安装在 Jenkins 管道上真的很慢(AWS EC2 实例)【英文标题】:Bundle install really slow on Jenkins Pipeline (AWS EC2 Instance) 【发布时间】: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'
            
        
    

我尝试做的是:

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

    在 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 作业日志导致更具体的上下文,例如无法连接捆绑包并且正在重试安装或构建作业的类似内容? 【参考方案1】:

解决了这个问题:

    使用 Java 和 Jenkins 创建主服务器 使用 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% 有效。即使这样,我认为最好在从属之间分配工作量

以上是关于捆绑安装在 Jenkins 管道上真的很慢(AWS EC2 实例)的主要内容,如果未能解决你的问题,请参考以下文章

使用 Jenkins 管道上的 AWS cli “期望用双引号括起来的属性名称”

来自 AWS ECR 的 Jenkins 管道 Docker 代理

Jenkins iOS fastlane 构建:找不到“捆绑程序”

在 Jenkins 管道中使用 Ansible 进行部署

AWS opsworks 上的 chef 12 脚本无法安装 jenkins

如何使用内置 Java 应用层在 AWS OpsWorks 上部署 Jenkins?