首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用GitLab CI部署到AWS Beanstalk

如何使用GitLab CI部署到AWS Beanstalk
EN

Stack Overflow用户
提问于 2020-06-03 03:00:24
回答 2查看 4K关注 0票数 4

如何在AWS Elastic Beanstalk、Docker和Gitlab ci上部署节点应用程序。

我已经创建了一个简单的节点应用程序。将节点应用程序Dockerized化。

我想要做的是使用gitlab ci部署我的应用程序。

这就是我到目前为止所知道的:

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

发布于 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镜像。

代码语言:javascript
复制
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设置示例

代码语言:javascript
复制
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...

希望这能帮上点忙

票数 3
EN

Stack Overflow用户

发布于 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是最简单、最简短的版本。还允许我以任何我想要的方式定制实例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62159453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档