如何在AWS Elastic Beanstalk、Docker和Gitlab ci上部署节点应用程序。
我已经创建了一个简单的节点应用程序。将节点应用程序Dockerized化。
我想要做的是使用gitlab ci部署我的应用程序。
这就是我到目前为止所知道的:
image: docker:git
services:
- docker:dind
stages:
- build
- release
- release-prod
variables:
CI_REGISTRY: registry.gitlab.com
CONTAINER_TEST_IMAGE: registry.gitlab.com/testapp/routing:$CI_BUILD_REF_NAME
CONTAINER_RELEASE_IMAGE: registry.gitlab.com/testapp/routing:latest
before_script:
- echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin "$CI_REGISTRY"
build:
stage: build
script:
- docker build -t $CONTAINER_TEST_IMAGE -f Dockerfile.prod .
- docker push $CONTAINER_TEST_IMAGE
release-image:
stage: release
script:
- docker pull $CONTAINER_TEST_IMAGE
- docker tag $CONTAINER_TEST_IMAGE $CONTAINER_RELEASE_IMAGE
- docker push $CONTAINER_RELEASE_IMAGE
only:
- master
release-prod:
stage: release-prod
script:
when: manual我被困在release-prod阶段。我只是不确定如何将应用程序部署到AWS Beanstalk。
因为我已经创建了docker镜像并将其存储在gitlab注册表中。我所要做的就是指示AWS Beanstalk从gitlab注册表下载docker镜像,然后启动应用程序。
我还有一个定义服务的Dockerrun.aws.json。
发布于 2020-06-03 03:41:56
您的Dockerrun.aws.json文件是Beanstalk在部署内容时的最终决定权。
我发现对我们有效的方法是制作一个安装了eb的自定义docker镜像,这样我们就可以从gitlab-ci.yml文件运行eb deploy...。
这需要跑步者的AWS权限才能访问aws服务,因此用户或权限就会发挥作用。但他们会不管怎样都是安排好的。
aws项目- CI/CD设置GitLab用户密钥(理想情况下,它被设置为使用IAM角色,但用户/密钥可以工作-我不太熟悉获得临时访问权限,这可能是最好的方法,但我也不确定它是如何工作的)
我们使用一个自定义的EC2实例作为我们的runner来运行管道,所以我不确定共享的runner --我们担心将用户凭证传递给一个共享的runner管道。
构建阶段:构建docker映像并将其推送到我们的ECR存储库或您的用例中
部署阶段:在GitLab中存储一个预装了eb的自定义镜像。然后运行eb deploy env-name
这是我们在PHP项目中使用的dockerfile。有些安装对你的情况来说不是必需的。这也可以通过添加用户和包版本来改进。这将创建一个安装了eb cli的docker镜像。
FROM node:12
RUN apt-get update && apt-get -y --allow-unauthenticated install apt-transport-https ca-certificates curl gnupg2 software-properties-common ruby-full \
&& add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
RUN apt-get update && apt-get -y --allow-unauthenticated install docker-ce \
&& apt-get -y install build-essential zlib1g-dev libssl-dev libncurses-dev libffi-dev libsqlite3-dev libreadline-dev libbz2-dev python-pip python3-pip
RUN git clone https://github.com/aws/aws-elastic-beanstalk-cli-setup.git \
&& ./aws-elastic-beanstalk-cli-setup/scripts/bundled_installer
RUN python3 --version && apt-get update && apt-get -y install python3-pip \
&& pip3 install awscli boto3 botocore && pip3 install boto3 botocore --upgradegitlab-ci.yml设置示例
release-prod:
image: registry.gitlab.com/your-acct/project/custom-image
stage: release-prod
script:
- service docker start
- echo 'export PATH="/root/.ebcli-virtual-env/executables:$PATH"' >> ~/.bash_profile && source ~/.bash_profile
- echo 'export PATH=/root/.pyenv/versions/3.7.2/bin:$PATH' >> /root/.bash_profile && source /root/.bash_profile
- eb deploy your-environment
when: manual您还可以将echo命令添加到自定义gitlab映像中,这样您只需运行eb deploy...
希望这能帮上点忙
发布于 2020-10-27 02:50:24
虽然有几种不同的方法可以实现这一点,但我最终找到了适合我的用例的解决方案。我在这里记录了使用eb deploy的https://medium.com/voices-of-plusdental/gitlab-ci-deployment-for-php-applications-to-aws-elastic-beanstalk-automated-qa-test-environments-253ca4932d5b是最简单、最简短的版本。还允许我以任何我想要的方式定制实例。
https://stackoverflow.com/questions/62159453
复制相似问题