$ pwd
/c/Users/kusdk/.ssh
$ ssh-keygen -t ed25519 -a 100 -f ssh-key
$ ls
airflow.txt data-eng-2022.pem docker_key.pem known_hosts skybluelee_accessKeys.csv spark_key.pem ssh-key.pub
config docker-key.pem grepp4a4.pem known_hosts.old spark-key.pem ssh-key test1.pem
ssh-key, ssh-key.pub이 생성됨. ssh-key는 개인키, ssh-key.pub은 공용키
Settings -> Deploy keys -> Add deploy key
ssh-key.pub을 입력
Allow write access 체크 후 Add key
ubuntu t3.medium
$ sudo apt update
$ sudo apt install -y docker.io
$ sudo chmod 666 /var/run/docker.sock -- docker 권한 부여
$ mkdir jenkins
$ ls
jenkins
$ docker run --name jenkins -d -p 8080:8080 -v ~/jenkins:/var/jenkins_home -u root jenkins/jenkins:latest
docker hub에서 jenkins 다운
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
77e041e47e84 jenkins/jenkins:latest "/usr/bin/tini -- /u…" 10 seconds ago Up 8 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 50000/tcp jenkins
$ docker exec -it jenkins bash -c "cat /var/jenkins_home/secrets/initialAdminPassword"
퍼블릭 IPv4 DNS:8080
위에서 찾은 admin pw를 사용해 로그인
Install suggested plugins
test, !test00, test, test@test.com
시간은 사용자 -> 설정 -> 시간 설정에서 변경 가능
jenkins 관리 -> Plugins
Available plugins에서 선택한 목록
Job DSLV
Pipeline: Deprecated Groovy LibrariesVersion
Pipeline: Declarative Agent APIVersion
Pipeline Utility StepsVersion
Build PipelineVersion
DockerVersion
Docker CommonsVersion
Docker PipelineVersion
Docker APIVersion
docker-build-stepVersion
GitHub IntegrationVersion
GitHub AuthenticationVersion
Pipeline: GitHubVersion
Gradle RepoVersion
CloudBees AWS CredentialsVersion
Pipeline: AWS StepsVersion
Amazon ECRVersion
AWS Global ConfigurationVersion
SSHVersion
Publish Over SSHVersion
SSH Pipeline Steps
SSH Agent
Install without restart
Jenkns 관리 -> Manage Credentials
System -> Add Credentials
Kind: SSH Username with private key
ID: ssh-key
Description: ssh-key
Username: ssh-key
Enter-directly 체크 후, 생성한 ssh-key 전부 입력
Jenkins 관리 -> System Configuration -> AWS
Region: AsiaPacific (Seoul)
Kind: AWS Credentials
ID: aws-key
Description: aws-key
Access Key ID, Secret Access Key는 IAM에서 생성
docker instance에는 docker, java, awscli가 설치되어 있어야 함.
test라는 리포지토리 설정, 전부 default.
현재 위치: local
/home/ubuntu/docker/Part2_Docker/Chapter02/2-jenkins-docker/Jenkinsfile을 수정
앞서 나온 URI값과 기타 설정을 수정
def mainDir="Chapter02/2-jenkins-docker"
def ecrLoginHelper="docker-credential-ecr-login"
def region="ap-northeast-1"
def ecrUrl="<AWS ECR URL>"
def repository="test"
def deployHost="<Deploy VM Private IP>"
$ mkdir pems
$ cd pems
$ vi docker-key.pem
deploy하는 docker instance의 pem key를 cat 을 사용하여 열어서 docker-key.pem 파일에 저장한다.
$ chmod 400 docker-key.pem
$ ls -al
total 12
drwxrwxr-x 2 ubuntu ubuntu 4096 Apr 23 11:50 .
drwxr-x--- 7 ubuntu ubuntu 4096 Apr 23 11:50 ..
-r-------- 1 ubuntu ubuntu 1675 Apr 23 11:50 docker-key.pem
docker-key.pem의 권한을 변경한다.
docker instance에서 ecr -> 푸쉬 명령 보기의 첫번째 줄을 사용하여
$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin .dkr.ecr.ap-northeast-1.amazonaws.com
WARNING! Your password will be stored unencrypted in /home/ubuntu/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
로그인한다
jenkins 관리 -> Security -> Manage Credentials -> Stores scoped to Jenkins -> System -> Global credentials (unrestricted) -> 우측 상단의 Add Credentials 클릭
Kind: SSH Username with private key
ID: docker-key
Description: docker-key
Username: docker-key
Enter-directly 체크 후, docker-key.pem 전부 입력
총 3개의 credentials 완성
docker/Part2_Docker/Chapter02/2-jenkins-docker/Jenkinsfile에서 작성하지 않았던 deployHost를 docker instance의 프라이빗 IPv4 주소로 설정
def mainDir="Part2_Docker/Chapter02/2-jenkins-docker"
def ecrLoginHelper="docker-credential-ecr-login"
def region="ap-northeast-1"
def ecrUrl=".dkr.ecr.ap-northeast-1.amazonaws.com"
def repository="test"
def deployHost=""
수정한 값을 git에 push
$ git init
$ git remote add origin https://github.com/skybluelee/docker.git
$ git add Jenkinsfile
$ git commit -m "Modify"
$ git push
좌측의 + 새로운 item 클릭
test-pipeline을 생성
repository URL은 SSH 주소를 사용
Script Path는 docker/Part2_Docker/Chapter02/2-jenkins-docker/Jenkinsfile의 Maindir을 사용
jenkins 관리 -> Security
ecr - test에 아무 이미지도 없는 상황
지금 빌드 클릭
이미지 ecr에 업로드 되는 것 확인
하지만 ecr -> aws image pull에서 오류가 발생하는데
전부 따라하지 않고 임의로 고친 것에서 오류가 발생했을 거라 생각함
기존의 docker에서 deploy를 바꾸지 않은 것에서 오류가 발생함