사용자 도구

사이트 도구


ci:jenkins:aws_plugin

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

다음 판
이전 판
ci:jenkins:aws_plugin [2018/08/22 11:27]
kwon37xi 만듦
ci:jenkins:aws_plugin [2022/07/07 10:38] (현재)
kwon37xi [EC2 Fleet]
줄 1: 줄 1:
 ====== Jenkins AWS Plugins ====== ====== Jenkins AWS Plugins ======
   * [[https://plugins.jenkins.io/pipeline-aws|Pipeline AWS]]   * [[https://plugins.jenkins.io/pipeline-aws|Pipeline AWS]]
-  * [[https://plugins.jenkins.io/aws-beanstalk-publisher-plugin|AWS BeansTalk Publisher Plugin]] +  * [[https://plugins.jenkins.io/s3|S3 Publisher]] 
-  * [[https://plugins.jenkins.io/awseb-deployment-plugin|AWS Elastic Beanstalk Deployment]]+ 
 +===== AWS Credentials Plugin ===== 
 +  * [[https://www.youtube.com/watch?v=iiF2iQV-3eM&list=WL&index=4| How to Integrate Jenkins With AWS - YouTube]] 
 +  * [[https://plugins.jenkins.io/aws-secrets-manager-credentials-provider/|AWS Secrets Manager Credentials Provider | Jenkins plugin]] 
 +  * https://github.com/jenkinsci/aws-credentials-plugin 
 +  * AWS Credential 환경변수 자동 주입. 
 + 
 +===== EC2 Fleet ===== 
 +  * [[https://plugins.jenkins.io/ec2-fleet/|EC2 Fleet | Jenkins plugin]] : 제일 나은 방법같음. 
 +  * [[ci:jenkins:agent|Jenkins Agent ( slave )]] 자동 확장.  
 +  * [[https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet.html|AWS Spot Fleet]] 혹은 [[https://docs.aws.amazon.com/ko_kr/autoscaling/ec2/userguide/AutoScalingGroup.html|Auto Scaling Group]] 사용 가능. 
 +  * **Autoscaling Group이나, Spot Request 자체에 EC2 인스턴스의 각종 설정을 미리 넣어둘 수 있어서 Jenkins 쪽에서 불필요한 Role을 가질 필요가 없음.** 
 +  * **Spot Instance를 사용하지 말 것** : Job 실행중에 갑자기 종료될 수 있음. 
 +  * [[https://aws.amazon.com/ko/blogs/compute/cost-optimize-your-jenkins-ci-cd-pipelines-using-ec2-spot-instances/|Cost Optimize your Jenkins CI/CD pipelines using EC2 Spot Instances | AWS Compute Blog]] 
 +  * [[https://www.youtube.com/watch?v=8gGItacZjps|Did You Know That There Is an Amazon EC2 Spot Fleet Plugin for Jenkins? - YouTube]] 
 +  * **Required Role** : ''AmazonEC2SpotFleetTaggingRole''(Spot Request 사용시에만), ''AmazonEC2ReadOnlyAccess'' 
 + 
 + 
 + 
 +===== ECS/Fargate ===== 
 +  * [[ci:jenkins:agent|Jenkins Agent ( slave )]]에서 더 자세히 정리. 
 +  * [[https://plugins.jenkins.io/amazon-ecs/|Amazon Elastic Container Service (ECS) / Fargate | Jenkins plugin]] 
 +  * [[https://www.jenkins.io/doc/pipeline/steps/amazon-ecs/|Amazon Elastic Container Service (ECS) / Fargate plugin]] 
 +  * [[https://www.youtube.com/watch?v=UU4-TB7vR8s|Using Jenkins and Docker Compose to Deploy to Amazon ECS - YouTube]] 
 +  * [[https://www.youtube.com/watch?v=K2CBHLwPL50|Run Jenkins Pipeline With AWS ECS Fargate & AWS EC2 Based ECS Cluster | Learn DevOps Tools Ep4 - YouTube]] : Fargate를 Slave Agent 로 사용하기 
 +  * [[https://aws.amazon.com/ko/blogs/devops/building-a-serverless-jenkins-environment-on-aws-fargate/|Building a serverless Jenkins environment on AWS Fargate | AWS DevOps Blog]] 
 +    * [[https://github.com/aws-samples/serverless-jenkins-on-aws-fargate/tree/main/docs|aws-samples/serverless-jenkins-on-aws-fargate]] 
 +  * [[https://hub.docker.com/r/jenkins/inbound-agent/|Docker jenkins/inbound-agent]] : java 버전별로 찾을 수 있다. docker & fargate 용. 이 이미지를 기준으로 fargate task 생성. 이 이미지를 확장하여 자신만의 slave agent docker  image 를 만들것. 
 +  * Fargate docker 이미지를 private repo 에서 가져올 수 있는 권한 설정 필요. 
 +    * [[https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/private-auth.html|태스크에 대한 프라이빗 레지스트리 인증 - Amazon Elastic Container Service]] 
 +    * [[https://docs.aws.amazon.com/AmazonECR/latest/userguide/ECR_on_ECS.html|Using Amazon ECR images with Amazon ECS - Amazon ECR]] 
 +  * Fargate 태스크에 AWS Role 을 지정할 수 있는 Role 필요. 
 +    * [[https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html|IAM Roles for Tasks - Amazon ECS]] 
 +  * Fargate 가 생각보다 빠르지 못한듯 하다. (TODO: 혹시 docker image를 외부에서 끌어올 경우? 내부로 변경하면?
 +  * [[https://tomgregory.com/jenkins-jobs-in-aws-ecs-with-slave-agents/|Running Jenkins jobs in AWS ECS with slave agents – Tom Gregory]] 
 + 
 +===== ec2 plugin ===== 
 +  * [[https://plugins.jenkins.io/ec2/|Amazon EC2 | Jenkins plugin]] 
 +  * [[ci:jenkins:agent|Jenkins Agent ( slave )]] 자동 확장 
 + 
 + 
 +  * **Jenkins Master** 에대한 IAM Role : ''EC2FullAccess'' 가 있어야 Slave Agent EC2를 생성할 수 있다. 또한, ''iam:PassRole''도 필요한데, 아래부분 참조. 
 +  * **Security Group, Subnet** : Slave EC2에 지정할 SG, Subnet. 이름이 아니라 **ID**로 입력해야한다. 쉼표로 구분. 당연히 Master 에서 SSH 접근 가능한 SG와 Subnet 이어야 한다. 
 +  * **EC2 Key Pair's Private Key(Agent EC2 접속 SSH Private Key)**: AWS 에 등록된 pem private Key 를 Jenkins Credential 로 등록하면, master 가 agent EC2 생성시 자동으로 private key 에 맞는 키로 등록해준다. 
 +  * Agent 용 AMI 는 JDK 가 깔려있고 PATH가 걸려있는게 좋다. 안그러면 JDK 설치까지도 EC2 Plugin 이 수행한다. 
 +  * **Remote FS root** : Amazon Linux 는 ''/home/ec2-user''. 배포판마다 적절히 지정 
 +  * **Remote user** : Amazon linux 는 ''ec2-user''. 배포판마다 적절히 지정. 
 +  * **Minimum number of instances** : 최소 유지 agent 갯수 
 +  * **Minimum number of spare instances** : 사용중인 agent 들에 더해서 추가로 상시 유지할 인스턴스. 즉 최소유지가 1개이고 최소 spare가 2개이면 첫번째 agent 노드에 job 이돌면 spare 2개가 더 뜨게된다. 
 +  * **Instance Cap** : 최대 Agent 인스턴스 갯수. 무한정 agent 가 늘어나는 것을 방지. 지정 AMI에만 해당하는 설정임. 
 +  * **Launch Timeout in seconds** : SSH 접속 최대 대기시간(초), 빈값,0 이면 무한정 대기 
 +  * **Host Key Verification Strategy** : ''off''면 ''no''. 신규 AMI들은 ''check-new-hard''로 하는게 좋음(신규 AMI는 콘솔에 host key를 출력함). 단, ''check-new-hard'', ''check-new-soft''는 EC2 인스턴스의 콘솔이 뜨면 콘솔에 뜬 값과 SSH키 값을 대조한다고 함. 그래서 콘솔 뜨기까지 launch timeout 을 길게 잡아야 한다. 뜨는데 오래걸림. 
 +  * **IAM Instance Profile** : Slave Agent EC2 인스턴스에 IAM Role을 지정하려면 IAM instance profile ARN을 지정해줘야한다.  
 +    * Slave EC2에 지정되길 원하는 IAM Role 의 Summary 화면에서 **Instance Profile ARNs**에 있는 ''arn:aws:iam:<userid>:**instance-profile**/<role-name>'' 형태의 값을 해당 설정에 넣어주면된다.  
 +{{:ci:jenkins:iam-role-instance-profile.png|}} 
 +    * 또한 Master 자체에 ''iam:PassRole'' 이 있어야 한다. Jenkins Master IAM Role 에 다음 정책추가필요. 
 +<code json> 
 +
 +    "Version": "2012-10-17", 
 +    "Statement": [{ 
 +        "Effect": "Allow", 
 +        "Action":
 +            "iam:GetRole", 
 +            "iam:PassRole" 
 +        ], 
 +        "Resource": "arn:aws:iam::<account-id>:role/원하는Role" # 여기는 Role 
 +    }] 
 +
 +# 혹시 필요하면, "iam:ListInstanceProfilesForRole"도 함께. 
 +</code> 
 + 
 +==== EC2 Plugin 참조 ==== 
 +  * [[https://www.iseatz.com/blog/ec2-plugin-jenkins-automatically-provision|Using the EC2 plugin for Jenkins to automatically provision for Amazon Web Services]] 
 +  * [[https://www.youtube.com/watch?v=dAa3u39RYpM|[ AWS 23 ] Launch AWS EC2 instances as Jenkins Slaves using EC2 plugin - YouTube]] 
 +  * [[https://www.youtube.com/watch?v=1XI9_4umWVk|Jenkins Master to Launch AWS EC2 instances as Slaves using EC2 plugin - YouTube]] 
 + 
 + 
 +===== ElasticBeansTalk Deployment ===== 
 +  * [[aws:elasticbeanstalk|AWS ElasticBeansTalk]] 
 +  * [[https://plugins.jenkins.io/aws-beanstalk-publisher-plugin|AWS BeansTalk Publisher Plugin]] : 이미 배포됐던 것을 다른 환경에 재배포하거나, Workspace에 있는 압축 파일을 S3 에 업로드하고 ElasticBeansTalk 배포를 자동으로 호출함. 이게 더 나은 듯. 
 +  * [[https://plugins.jenkins.io/awseb-deployment-plugin|AWS Elastic Beanstalk Deployment]] : Workspace에 있는 파일을 압축하여 (혹은 압축된 파일을) S3 에 버전 붙여 업로드하고 ElasticBeansTalk 배포를 자동으로 호출하는 것까지 됨. 
 +===== 참조 ===== 
 +  * [[https://www.youtube.com/watch?v=iiF2iQV-3eM|How to Integrate Jenkins With AWS - YouTube]]
  
ci/jenkins/aws_plugin.1534904855.txt.gz · 마지막으로 수정됨: 2018/08/22 11:27 저자 kwon37xi