如何使用 Gitlab CI 提高基于 python 的无服务器框架项目的部署速度
How to improve the speed of deployment for a python based serverless framework project using Gitlab CI
我正在尝试将我的无服务器项目与现有的 Git 存储库集成,并采用 CI 设置。现有的 gitlab-ci.yml 需要 docker 图像。
我是 Gitlab CI 的新手,所以我在另一个 git 存储库中尝试着让它工作。
我已经能够让它与两个不同的 gitlab-ci.yml 设置一起工作。但是,速度存在显着差异。
使用 ubuntu 映像,部署需要 6 分钟:
deploy-stage:
stage: deploy
image: ubuntu:18.04
environment:
name: stage
script:
- apt-get update
- apt-get install -y curl software-properties-common
- curl -sL https://deb.nodesource.com/setup_12.x -o nodesource_setup.sh
- bash nodesource_setup.sh
- apt install -y nodejs
- add-apt-repository ppa:deadsnakes/ppa
- apt install -y python3.8 python3-pip
- cd db_update_campaigns
- npm install
- npm install -g serverless
- sls deploy -v
然后我能够让它与 docker 图像一起工作(这是我需要做的将它与现有的 git 存储库集成),但是需要 24 分钟才能完成部署:
deploy-stage:
stage: deploy
image: docker:stable
environment:
name: stage
script:
- apk add --update python3 py3-pip python3-dev nodejs nodejs-npm build-base postgresql-dev
- cd db_update_campaigns
- npm install
- npm install -g serverless
- sls deploy -v
有谁知道为什么会有这样的速度差异?
另外,在使用 docker 图像时,有什么方法可以提高部署速度吗?
如有任何帮助,我们将不胜感激。在这方面我完全是初学者,因此非常感谢您的任何建议。非常感谢。
您似乎正在安装每个构建所需的依赖项。 (cd db_update_campaigns
之前的所有命令)。这些并不特定于当前包的部署,因此可以事先准备好,因此只有 npm install
和 sls deploy
命令需要在部署时 运行。
为此,首先创建一个自定义 docker 图像,基于 docker:stable。此图像应添加所有必需的依赖项:
FROM docker:stable
RUN apk add --update python3 py3-pip python3-dev nodejs nodejs-npm build-base postgresql-dev
构建和push the image to a registry(例如dockerhub)
docker build -t <dockerhubusername>/myBuildImage:latest
docker push <dockerhubusername>/myBuildImage:latest
在你的 gitlab-ci.yaml 中引用你的自定义图像而不是普通的 docker 图像。
deploy-stage:
stage: deploy
image: <dockerhubusername>/myBuildImage:latest
environment:
name: stage
script:
- cd db_update_campaigns
- npm install
- npm install -g serverless
- sls deploy -v
这应该会在部署期间为您节省一些时间,因为映像不需要每次都安装依赖项。
如果您更喜欢使用私有 dockerhub 注册表或 gitlab 注册表,请参阅 gitlab 文档中的 Define an image from a private Container Registry 了解如何设置
我正在尝试将我的无服务器项目与现有的 Git 存储库集成,并采用 CI 设置。现有的 gitlab-ci.yml 需要 docker 图像。
我是 Gitlab CI 的新手,所以我在另一个 git 存储库中尝试着让它工作。
我已经能够让它与两个不同的 gitlab-ci.yml 设置一起工作。但是,速度存在显着差异。
使用 ubuntu 映像,部署需要 6 分钟:
deploy-stage:
stage: deploy
image: ubuntu:18.04
environment:
name: stage
script:
- apt-get update
- apt-get install -y curl software-properties-common
- curl -sL https://deb.nodesource.com/setup_12.x -o nodesource_setup.sh
- bash nodesource_setup.sh
- apt install -y nodejs
- add-apt-repository ppa:deadsnakes/ppa
- apt install -y python3.8 python3-pip
- cd db_update_campaigns
- npm install
- npm install -g serverless
- sls deploy -v
然后我能够让它与 docker 图像一起工作(这是我需要做的将它与现有的 git 存储库集成),但是需要 24 分钟才能完成部署:
deploy-stage:
stage: deploy
image: docker:stable
environment:
name: stage
script:
- apk add --update python3 py3-pip python3-dev nodejs nodejs-npm build-base postgresql-dev
- cd db_update_campaigns
- npm install
- npm install -g serverless
- sls deploy -v
有谁知道为什么会有这样的速度差异? 另外,在使用 docker 图像时,有什么方法可以提高部署速度吗?
如有任何帮助,我们将不胜感激。在这方面我完全是初学者,因此非常感谢您的任何建议。非常感谢。
您似乎正在安装每个构建所需的依赖项。 (cd db_update_campaigns
之前的所有命令)。这些并不特定于当前包的部署,因此可以事先准备好,因此只有 npm install
和 sls deploy
命令需要在部署时 运行。
为此,首先创建一个自定义 docker 图像,基于 docker:stable。此图像应添加所有必需的依赖项:
FROM docker:stable
RUN apk add --update python3 py3-pip python3-dev nodejs nodejs-npm build-base postgresql-dev
构建和push the image to a registry(例如dockerhub)
docker build -t <dockerhubusername>/myBuildImage:latest
docker push <dockerhubusername>/myBuildImage:latest
在你的 gitlab-ci.yaml 中引用你的自定义图像而不是普通的 docker 图像。
deploy-stage:
stage: deploy
image: <dockerhubusername>/myBuildImage:latest
environment:
name: stage
script:
- cd db_update_campaigns
- npm install
- npm install -g serverless
- sls deploy -v
这应该会在部署期间为您节省一些时间,因为映像不需要每次都安装依赖项。
如果您更喜欢使用私有 dockerhub 注册表或 gitlab 注册表,请参阅 gitlab 文档中的 Define an image from a private Container Registry 了解如何设置