如何使用GitLab CI部署到AWS Beanstalk上?

问题描述 投票:0回答:1

如何在AWS Elastic Beanstalk、Docker和Gitlab ci上部署Node应用。

我创建了一个简单的node应用。Docker化了node应用。

我想做的是使用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

我停留在发布-生产阶段。我只是不知道如何将应用部署到AWS Beanstalk上。

因为我已经创建了docker镜像并存储在gitlab注册表中。我想做的就是指示AWS Beanstalk从gitlab注册表中下载docker镜像,然后启动应用。

我也有一个 Dockerrun.aws.json 其中定义了服务。

amazon-web-services docker continuous-integration amazon-elastic-beanstalk gitlab-ci
1个回答
1
投票

你的Dockerun.aws.json文件是Beanstalk对部署的最终决定权。

我发现对我们有用的方法是制作一个安装了eb cli的自定义docker镜像,这样我们就可以运行了。eb deploy... gitlab-ci.yml文件中的内容。

这需要AWS的权限,虽然运行者能够访问aws服务,所以一个用户或权限发挥作用。但无论怎么设置,他们都会这样做。

GitLab项目--CICD设置aws用户密钥(理想情况下,它被设置为使用IAM角色,而不是,但Userkeys将工作 - 我不太熟悉获得临时访问,这可能是最好的事情,但再次,我不知道是如何工作的

我们使用一个定制的EC2实例作为我们的运行器来运行管道,所以我不确定共享运行器 - 我们有一个担心将aws用户证书传递给共享运行器管道......

构建阶段:构建并将docker镜像推送到我们的ECR仓库或你的用例中。

部署阶段:在GitLab中存储了一个自定义镜像,已经预先安装了eb cli。然后运行 eb deploy env-name

这是我们PHP项目使用的docker文件。对于你的情况,有些安装是不必要的...... 这也可以通过添加用户和包的版本来改进。这将创建一个安装了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 --upgrade

例子 gitlab-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部署......

希望这能帮到你

© www.soinside.com 2019 - 2024. All rights reserved.