捆绑安装在 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 构建:找不到“捆绑程序”