CircleCI - 安装依赖项步骤花费的时间太长
CircleCI - install dependencies step taking too long
我的 CircleCi YAML 文件的 Install Dependencies 步骤需要大约 3 分钟才能 运行 并且我收到关于 Python 2.7 退出生命周期的各种警告2021 年。我能做些什么来加快速度并删除这些错误消息吗?
version: 2
jobs:
build:
working_directory: ~/myapp
docker:
- image: node:10.13.0-stretch
env:
- DISPLAY=:99
- CHROME_BIN=/usr/bin/google-chrome
steps:
- checkout
- restore_cache:
keys:
- v1-dependencies-{{ checksum "package.json" }}
# fallback to using the latest cache if no exact match is found
- v1-dependencies-
- run:
name: Install Dependencies
command: |
npm install -g @angular/cli
npm install
npm install -g firebase-tools
apt-get -y -qq update
apt-get -y -qq install gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget
if [[ "$CIRCLE_BRANCH" == "master" ]]; then
apt-get -y -qq update
apt-get -y -qq install python-dev
curl -O https://bootstrap.pypa.io/get-pip.py
python get-pip.py --user
echo 'export PATH=/root/.local/bin:$PATH' >> ~/.bash_profile
source ~/.bash_profile
pip install awscli --upgrade --user
~/.local/bin/aws configure set default.s3.signature_version s3v4
fi
- save_cache:
paths:
- node_modules
key: v1-dependencies-{{ checksum "package.json" }}
- run:
name: Deploy to AWS
command: |
if [[ "$CIRCLE_BRANCH" == "master" ]]; then
ng build --prod --configuration=production --progress=false
~/.local/bin/aws --region eu-west-2 s3 sync /root/myapp/dist/myapp/ s3://$AWS_BUCKET_TARGET --delete --exclude '.git/*'
~/.local/bin/aws cloudfront create-invalidation --distribution-id $AWS_DISTRIBUTION_ID --paths '/*'
fi
branches:
only:
- master
根据您的配置,您似乎正在使用 Python 构建 Angular 应用程序并部署到 AWS。
以下是一些建议:
- 您是否考虑过使用 pre-made Python/Node image variant 而不是使用 Node 映像并安装 Python?这些图像已经安装了 Python 和 Node。这应该会节省很多时间。
- 还注意到您正在全局安装 Angular CLI 和 firebase-tools。全局 npm 模块安装在与当前项目
node_modules
不同的文件夹中。如果你也想缓存这些依赖项,建议只安装没有 -g
标志,或者另外向 save_cache
和 restore_cache
步骤提供全局模块文件夹,这样你就不必重新安装那些每次都从头开始。
- 如果您没有使用 CircleCI 的服务器产品,您可以使用 v2.1 配置并根据需要使用 CircleCI 的 AWS CLI orb 安装 CLI。这是一个例子:
version: 2.1 # 2.1 required for orbs
orbs:
aws-cli: circleci/aws-cli@1.3.0
# ...
steps:
# ...other dependency installation steps as required
- aws-cli/install # Call pre-made commands in orb
- run:
command: |
aws configure set default.s3.signature_version s3v4
# ...etc.
- 这与问题并不完全相关,但我注意到您使用了一些已弃用的配置。您可以删除所有步骤中对
$CIRCLE_BRANCH
的 bash 检查以及最后的 branches
键。相反,像这样声明一个 workflow with a filter:
workflows:
build-deploy: # arbitrary workflow name of your choice
jobs:
- build:
filters:
branches:
only: master
我的 CircleCi YAML 文件的 Install Dependencies 步骤需要大约 3 分钟才能 运行 并且我收到关于 Python 2.7 退出生命周期的各种警告2021 年。我能做些什么来加快速度并删除这些错误消息吗?
version: 2
jobs:
build:
working_directory: ~/myapp
docker:
- image: node:10.13.0-stretch
env:
- DISPLAY=:99
- CHROME_BIN=/usr/bin/google-chrome
steps:
- checkout
- restore_cache:
keys:
- v1-dependencies-{{ checksum "package.json" }}
# fallback to using the latest cache if no exact match is found
- v1-dependencies-
- run:
name: Install Dependencies
command: |
npm install -g @angular/cli
npm install
npm install -g firebase-tools
apt-get -y -qq update
apt-get -y -qq install gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget
if [[ "$CIRCLE_BRANCH" == "master" ]]; then
apt-get -y -qq update
apt-get -y -qq install python-dev
curl -O https://bootstrap.pypa.io/get-pip.py
python get-pip.py --user
echo 'export PATH=/root/.local/bin:$PATH' >> ~/.bash_profile
source ~/.bash_profile
pip install awscli --upgrade --user
~/.local/bin/aws configure set default.s3.signature_version s3v4
fi
- save_cache:
paths:
- node_modules
key: v1-dependencies-{{ checksum "package.json" }}
- run:
name: Deploy to AWS
command: |
if [[ "$CIRCLE_BRANCH" == "master" ]]; then
ng build --prod --configuration=production --progress=false
~/.local/bin/aws --region eu-west-2 s3 sync /root/myapp/dist/myapp/ s3://$AWS_BUCKET_TARGET --delete --exclude '.git/*'
~/.local/bin/aws cloudfront create-invalidation --distribution-id $AWS_DISTRIBUTION_ID --paths '/*'
fi
branches:
only:
- master
根据您的配置,您似乎正在使用 Python 构建 Angular 应用程序并部署到 AWS。
以下是一些建议:
- 您是否考虑过使用 pre-made Python/Node image variant 而不是使用 Node 映像并安装 Python?这些图像已经安装了 Python 和 Node。这应该会节省很多时间。
- 还注意到您正在全局安装 Angular CLI 和 firebase-tools。全局 npm 模块安装在与当前项目
node_modules
不同的文件夹中。如果你也想缓存这些依赖项,建议只安装没有-g
标志,或者另外向save_cache
和restore_cache
步骤提供全局模块文件夹,这样你就不必重新安装那些每次都从头开始。 - 如果您没有使用 CircleCI 的服务器产品,您可以使用 v2.1 配置并根据需要使用 CircleCI 的 AWS CLI orb 安装 CLI。这是一个例子:
version: 2.1 # 2.1 required for orbs
orbs:
aws-cli: circleci/aws-cli@1.3.0
# ...
steps:
# ...other dependency installation steps as required
- aws-cli/install # Call pre-made commands in orb
- run:
command: |
aws configure set default.s3.signature_version s3v4
# ...etc.
- 这与问题并不完全相关,但我注意到您使用了一些已弃用的配置。您可以删除所有步骤中对
$CIRCLE_BRANCH
的 bash 检查以及最后的branches
键。相反,像这样声明一个 workflow with a filter:
workflows:
build-deploy: # arbitrary workflow name of your choice
jobs:
- build:
filters:
branches:
only: master