如何在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
其中定义了服务。
你的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部署......
希望这能帮到你