Aws ECS Pipeline

Pipeline sürecinde kullanılan toollar

Github - Jenkins - Dockers - AWS ECS

Jenkins Pipeline job'ı ile Git repodan java kodu çekilir. Jenkins üzerinde maven ile derlenip docker image oluşturulur. Daha sonra bu image Aws Ecs servisinde çalıştırılır.

Uygulama

Hello word yazdıran bir java uygulaması.

Amazon yapılandırması

  • IAM user oluşturuldu
  • Vpc oluşturdu
  • Keypair oluşturdu. Bu keypair ecs için optimize bir ec2 instance'ını oluşturulurken kullanıldı.
  • EC2'nun ECS ile birlikte çalışabilmesi için IAM role oluşturuldu. (Kullanılan policy'lerin json dosyalarını repoda bulabilirsiniz.)
  • # aws iam create-role --role-name ecsRole --assume-role-policy-document file://forecspolicy.json

    # aws iam put-role-policy --role-name ecsRole --policy-name ecsRolePolicy --policy-document file://role.json

    # aws iam create-instance-profile --instance-profile-name ecsRole

    # aws iam add-role-to-instance-profile --instance-profile-name ecsRole --role-name ecsRole

  • ECS cluster'ına eklemek için optimize edilmiş Amazon Linux 2 oluşturuldu
  • # aws ec2 run-instances --image-id ami-0c5abd45f676aab4f --count 1 --instance-type t2.micro --key-name helloworldkey --iam-instance-profile "Name= ecsRole" --security-groups HelloWorldSecurityGroup --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=MyECSInstance}]'

  • ECS Cluster oluşturuldu
  • # aws ecs create-cluster --cluster-name default

  • ECS task and service oluşturuldu
  • # sed -e "s;%BUILD_NUMBER%;0;g" helloworld.json > helloworld-v_0.json

    # aws ecs register-task-definition --cli-input-json file://helloworld-v_0.json

    # aws ecs create-service --cluster default --service-name helloworldfamilyservice --task-definition helloworldfamily --desired-count 0

Jekins

Pluginler:

  • Docker Build and Publish
  • dockerhub plugin
  • Github plugin
  • Amazon EC2 Container Service Cloud

Jenkins job'ının xml dosyasını bu repoda bulabilirsiniz. Ayrıca ECS üzerine docker deployment'i için DeployEcs.sh scripti kullanıldı. Onu da repoda bulabilirsiniz.