티스토리 뷰
728x90
1. Code Commit 생성 및 소스 업로드
1.1. Code Commit 저장소 생성
1.2. iam 유저에 CodeCommit 권한 부여
- AWSCodeCommitPowerUser 권한을 부여한다.
1.3. 소스 업로드 (HTTPS GRC)
1.3.1. git-remote-codecommit 설치
pip3 install git-remote-codecommit
1.3.2. git 초기화 및 설정
git init
git remote add codecommit::[[리젼]]://[[저장소명]]
1.3.3. 소스 원격 저장소로 푸시
git push --set-upstream origin master
2. Jenkins, Docker, Aws Cli 설치 및 설정
- Jenkins를 설치할 서버에 아래 모두를 설치해준다.
2.1. Jenkins 설치
2.2. Docker 설치
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
sudo apt update
apt-cache policy docker-ce
sudo apt install docker-ce
- docker 설치 후 /var/run/docker.sock의 permission denied 발생하는 경우
sudo chmod 666 /var/run/docker.sock
2.3. AWS CLI 설치
sudo apt install awscli
2.4. 서버에 jenkins sudo 권한 추가
sudo vi /etc/sudoers
# 아래 라인 추가
jenkins ALL=(ALL) NOPASSWD: ALL
3. Jenkins 설정
3.1. Jenkins Plugin 설치
- Docker Pipeline
- Pipeline: AWS Steps
3.2. jenkins code commit 자격증명 정보 환경변수 등록
3.2.1. git 자격 증명 생성
- iam -> 상용자 -> git 권한을 가지고 있는 사용자 정보 페이지 -> 보안자격증명 탭 클릭 -> 하단 git 자격 증명 생성
3.2.2. git 자격 증명 등록
- Jenkins 관리 -> Manange Credentials -> Jenkins -> Global credentials (unrestricted)
- 위에서 만든 git 자격증명 정보를 저장한다.
- USERNAME - 위에서 만든 ACCESS KEY, PASSWORD - 위에서 만든 SECRET KEY
3.3. Jenkins ECR 자격증명 정보 저장
- Jenkins 관리 -> Manange Credentials -> Jenkins -> Global credentials (unrestricted)
- AWS ecr권한이 있는 iam 사용자의 access key, secret key를 환경변수로 저장한다.
4. 프로젝트 추가
- DashBoard -> New Item 으로 Pipeline 프로젝트 추가
4.1. pipeline script 추가
- 프로젝트 -> 구성 페이지 내에 있는 pipeline 스크립트에 아래내용을 추가한다.
pipeline {
agent any
stages {
stage('Git Clone') {
steps {
script {
try {
git url: "[[CODE COMMIT 주소]]", branch: "master", credentialsId: "[[Jenkins에 등록한 git 접속 정보 환경변수 아이디 입력]]"
sh "sudo rm -rf ./.git"
env.cloneResult=true
} catch (error) {
print(error)
env.cloneResult=false
currentBuild.result = 'FAILURE'
}
}
}
}
stage('ECR Upload') {
steps{
script{
try {
withAWS(credentials: '[[Jenkins에 등록한 ECR 유저 접속 정보 환경변수 아이디 입력]]') {
sh 'aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin [[Docker를 push할 AWS ECR 주소]]'
app = docker.build("[[Docker를 push할 AWS ECR 주소]]:latest")
app.push()
}
} catch (error) {
print(error)
echo 'Remove Deploy Files'
sh "sudo rm -rf /var/lib/jenkins/workspace/${env.JOB_NAME}/*"
currentBuild.result = 'FAILURE'
}
}
}
post {
success {
echo "The ECR Upload stage successfully."
}
failure {
echo "The ECR Upload stage failed."
}
}
}
stage('Deploy'){
steps {
script{
try {
withAWS(credentials: '[[Jenkins에 등록한 ECR 유저 접속 정보 환경변수 아이디 입력]]') {
sh"""
aws ecs update-service --region ap-northeast-2 --cluster [[ECS 클러스터명]] --service [[ECS 서비스명]] --force-new-deployment
"""
}
} catch (error) {
print(error)
echo 'Remove Deploy Files'
sh "sudo rm -rf /var/lib/jenkins/workspace/${env.JOB_NAME}/*"
currentBuild.result = 'FAILURE'
}
}
}
post {
success {
echo "The deploy stage successfully."
}
failure {
echo "The deploy stage failed."
}
}
}
}
}
5. AWS 유저 권한 추가
- ECR, ECS 배포시 사용할 유저에 아래 권한을 추가해준다.
- 아래 권한들은 iam 페이지의 정책을 추가하여 권한 부여해준다.
5.1. sample-cluster-service-update-policy 정책 추가
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"application-autoscaling:Describe*",
"application-autoscaling:PutScalingPolicy",
"application-autoscaling:DeleteScalingPolicy",
"application-autoscaling:RegisterScalableTarget",
"cloudwatch:DescribeAlarms",
"cloudwatch:PutMetricAlarm",
"ecs:List*",
"ecs:ExecuteCommand",
"ecs:Describe*",
"ecs:UpdateService",
"iam:PassRole",
"iam:AttachRolePolicy",
"iam:CreateRole",
"iam:GetPolicy",
"iam:GetPolicyVersion",
"iam:GetRole",
"iam:ListAttachedRolePolicies",
"iam:ListRoles",
"iam:ListGroups",
"iam:ListUsers"
],
"Resource": [
"[[ECS 서비스 ARN 주소]]"
]
}
]
}
5.2. 권한 부여
6. 배포 및 확인
728x90
'개발도구 > aws' 카테고리의 다른 글
Ubuntu 18버전에서 Jenkins 설치 (0) | 2022.03.14 |
---|---|
EC2 Instance Connect 설정 (0) | 2022.03.12 |
AWS ECR - Docker Image Push (0) | 2022.03.11 |
댓글