Docker Jenkins

이상민·2023년 4월 23일
0

docker

목록 보기
14/19

준비

ssh-key 생성

$ 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은 공용키

git 연동


Settings -> Deploy keys -> Add deploy key

ssh-key.pub을 입력
Allow write access 체크 후 Add key

jenkins용 인스턴스 생성

ubuntu t3.medium

ubuntu 접속

$ sudo apt update
$ sudo apt install -y docker.io
$ sudo chmod 666 /var/run/docker.sock -- docker 권한 부여

$ mkdir jenkins
$ ls
jenkins

jenkins container 실행

$ 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

Admin Password 확인

$ docker exec -it jenkins bash -c "cat /var/jenkins_home/secrets/initialAdminPassword"

jenkins server 확인

퍼블릭 IPv4 DNS:8080

위에서 찾은 admin pw를 사용해 로그인
Install suggested plugins

test, !test00, test, test@test.com

시간은 사용자 -> 설정 -> 시간 설정에서 변경 가능

plugin 설치


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

인증 설정

ssh-key


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 전부 입력

aws credential

Jenkins 관리 -> System Configuration -> AWS
Region: AsiaPacific (Seoul)

Kind: AWS Credentials
ID: aws-key
Description: aws-key
Access Key ID, Secret Access Key는 IAM에서 생성

ecr 생성

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 추가 설정

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 완성

jenkinsfile 수정

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

jenkins

좌측의 + 새로운 item 클릭
test-pipeline을 생성

repository URL은 SSH 주소를 사용

Script Path는 docker/Part2_Docker/Chapter02/2-jenkins-docker/Jenkinsfile의 Maindir을 사용

Repository 문제 해결

jenkins 관리 -> Security

실행

실행전


ecr - test에 아무 이미지도 없는 상황

지금 빌드 클릭

실행후


이미지 ecr에 업로드 되는 것 확인
하지만 ecr -> aws image pull에서 오류가 발생하는데
전부 따라하지 않고 임의로 고친 것에서 오류가 발생했을 거라 생각함
기존의 docker에서 deploy를 바꾸지 않은 것에서 오류가 발생함

0개의 댓글