如何从GitLab存储库将Web应用程序部署到AWS实例

时间:2018-07-20 12:38:55

标签: spring-boot amazon-ec2 continuous-integration gitlab gitlab-ci

现在,我将(Spring Boot)应用程序部署到EC2实例,例如:

  1. 在本地计算机上构建JAR文件
  2. 通过scp命令(Ubuntu)从我的本地计算机部署/上传JAR

我想自动化该过程,但是:

  1. 不使用Jenkins + Rundeck CI / CD工具
  2. 不使用AWS CodeDeploy服务,因为它不支持GitLab

问题:是否可以使用GitLab CI / CD工具执行2个简单步骤(现已手动完成-通过scp进行构建和部署),如果可以,您能否提出?简单的步骤即可。

谢谢!

3 个答案:

答案 0 :(得分:1)

您需要在存储库中create a .gitlab-ci.yml file定义CI作业,以执行您定义的两个任务。

这是一个让您入门的示例。

stages:
  - build
  - deploy

build:
  stage: build
  image: gradle:jdk
  script:
    - gradle build
  artifacts:
    paths:
      - my_app.jar

deploy:
  stage: deploy
  image: ubuntu:latest
  script:
    - apt-get update
    - apt-get -y install openssh-client
    - scp my_app.jar target.server:/my_app.jar

在此示例中,构建作业运行gradle容器并使用gradle构建应用。 GitLab CI工件用于捕获内置的jar(my_app.jar),并将其传递给部署作业。

部署作业运行ubuntu容器,安装openssh-client(用于scp),然后执行scp将my_app.jar(从构建作业传递过来)打开到目标服务器。

您必须填写构建和复制应用程序的实际详细信息。对于诸如SSH密钥之类的机密,将set project level CI/CD variables传递到您的CI作业中。

答案 1 :(得分:0)

使用以下内容创建外壳文件。

#!/bin/bash
# Copy JAR file to EC2 via SCP with PEM in home directory (usually /home/ec2-user)
scp -i user_key.pem file.txt ec2-user@my.ec2.id.amazonaws.com:/home/ec2-user
#SSH to EC2 Instnace
ssh -T -i "bastion_keypair.pem" ec2-user@y.ec2.id.amazonaws.com /bin/bash <<-'END2'
 #The following commands will be executed automatically by bash.
 #Consdier this as remote shell script.
 killall java
 java -jar ~/myJar.jar server ~/config.yml &>/dev/null &
 echo 'done'
 #Once completed, the shell will exit.
END2

答案 2 :(得分:0)

在2020年,使用较旧的功能GitLab 13.0 (May 2020)(在Auto DevOps,2018年6月推出)中使用GitLab 11.0应该更容易

Auto DevOps提供了预定义的CI / CD配置,使您可以自动检测,构建,测试,部署和监视应用程序。
借助CI / CD最佳实践和工具,Auto DevOps旨在简化成熟,现代的软件开发生命周期的设置和执行。 概述

但现在(2020年5月):

自动部署到ECS

到目前为止,还没有一种简单的方法可以部署到Amazon Web Services。结果,Gitlab用户不得不花费大量时间来确定自己的配置。

在Gitlab 13.0中,Auto DevOps已扩展为支持部署到AWS!

部署到AWS Elastic Container Service(ECS)的Gitlab用户现在可以利用Auto DevOps,即使他们没有使用Kubernetes。 Auto DevOps具有开箱即用的完整交付管道,可简化并加速交付和云部署。只需提交代码,Gitlab即可完成其余工作!通过消除复杂性,团队可以专注于软件创建的创新方面!

为了启用此工作流程,用户需要:

  • 定义AWS类型的环境变量:“ AWS_ACCESS_KEY_ID”,“ AWS_ACCOUNT_ID”和“ AWS_REGION”,以及
  • 启用自动DevOps。

然后,将通过完整,自动的交付管道为您自动构建ECS部署。

请参见documentationissue