git remote branch 변경하기.

|

깃 리모트 변경 하기

기존 리포지토리 pull / push

git pull
git add .
git commit -m "clean push"
git push

기존 리포지토리 remote 제거

git remote remove origin

새 리포지토리 remote 추가

git remote add origin https://github.com/playauto/리포지토리명 

기존 리포지토리를 새 리포지토리 remote 에 전부 push

git push -u origin --all
git push -u origin --tags

출처 :

  • https://gist.github.com/480/4681b67d2a906db8c6c1321cc678f05f

Docker를 통한 젠킨스(Jenkins) 설치하기.

|

도커가 설치되어 있다고 가정한다.

1. Jenkins 이미지 내려 받기

Docker Hub 에서 Jenkins 이미지를 내려받을 수 있다.

Docker Hub이란?

  • 도커 이미지를 업로드해서 공유하는 저장소를 도커 레지스트리(Docker Registry)라고 한다. 대표적으로는 도커의 공식 레지스트리인 Docker Hub 가 있다. 도커 허브에서는 업체에서 제공하는 공식 이미지를 받을 수 있다.
  • Ubuntu 나 CentOS 같은 OS 이미지, MySQL, Redis, MongoDB, Nginx 와 같은 미들웨어, OpenJDK, Golang, NodeJS 와 같은 플랫폼 이미지도 제공한다.

내려받을 jenkins 이미지 파일과 pull 명령어를 확인할 수 있다.
여기서는 lts 버전 파일을 내려받았다.

docker pull jenkins/jenkins:lts

2. Jenkins 이미지를 컨테이너로 실행하기

  • 내려받은 이미지는 그냥 이미지일 뿐이고 실제 그것을 컨테이너에 올리는 작업까지 해야 의미가 있다. (그것은 마치 클래스를 인스턴스화 시키는것과 비슷하다.(비슷한가?))

docker images 로 내려받아진 이미지 repository 명 확인후에

아래 명령어를 실행한다.

$ docker run -d -p 8181:8080 -v /jenkins:/var/jenkins_home --name jm_jenkins -u root jenkins/jenkins:lts

// 위 명령어 옵션설명 
-d	detached mode 흔히 말하는 백그라운드 모드
-p	호스트와 컨테이너의 포트를 연결 (포워딩)
-v	호스트와 컨테이너의 디렉토리를 연결 (마운트)
–name	컨테이너 이름 설정
-u 실행할 사용자 지정

맨 마지막 jenkins/jenkins:lts 는 실행할 이미지의 레포지토리 이름이며 만약 이미지가 없을 경우 이미지를 docker hub 에서 땡겨오므로 주의한다.

3. Jenkins 브라우저로 접속하여 설치작업 계속하기.

docker ps 명령을 통해서 정상적으로 jenkins 컨테이너가 올라온 것을 확인했다면, 브라우저를 통해 해당 포트로 접속한다. Jenkins 설치를 계속하기 위해선 admin password 를 입력해야 한다.

원랜 jenkins 도커 이미지에 접근하여 initialAdminPassword 폴더에 접근 후 패스워드를 가져와야 하지만 “docker logs jenkins” 명령어를 통해 굳이 폴더 접근하지 않아도 확인할 수 있다.

Admin password 입력

플러그인 설치

처음 설치할 플러그인들을 선택하는 화면이 나온다. 여기선 기본 권장 플러그인들을 선택하고 설치를 진행한다.

설치중 화면

플러그인 설치 후 초기 계정 생성.

설치 완료 후 화면

참고자료:

  • https://futurecreator.github.io/2018/11/16/docker-container-basics/
  • https://www.leafcats.com/215

Docker 기본 명령어 정리.

|

자주 사용하거나 자주 사용하게 될 명령어들을 다른 블로그를 참고하여 작성하였다.

버전 확인

docker -v

이미지 내려 받기

docker pull [이미지 이름]

ex) docker pull centos:7

컨테이너 실행

docker start mycentos

컨테이너 내부 접근

docker attach mycentos

컨테이너 생성 및 내부접근

docker run -i -t --name centos7 centos:7

컨테이너 정지

docker stop centos7

컨테이너 정지 후 빠져나오기

exit

or Ctrl + D

컨테이너 정지하지 않고 빠져나오기

Ctrl + P, Q

컨테이너 실행 중인 목록 확인

docker ps

컨테이너 모든 목록 확인

docker ps -a

컨테이너 이름 변경

docker rename [변경 전 컨테이너 이름] [변경 후 컨테이너 이름]

exec 명령어사용을 통한 백그라운드 실행 컨테이너 내부 접속

docker exec -i -t wordpressdb /bin/bash

Docker container & image 삭제관련 명령어

컨테이너 삭제

docker rm [컨테이너id]

컨테이너 모두 삭제

docker rm `docker ps -a -q`

이미지 삭제

현재 이미지 확인

docker images

이미지 삭제

docker rmi [이미지id]

컨테이너를 삭제하기 전에 이미지를 삭제

docker rmi -f [이미지id]

모든 도커 컨테이너 삭제(remove all docker containers)

  • 구동중인 모든 도커 컨테이너들을 중지시키고, 삭제한다.
     docker stop `docker ps -a -q`
     docker rm `docker ps -a -q`
    

모든 도커 이미지 삭제(remove all docker images)

- docker rmi `docker images -q`

docker image 실행 및 옵션설명 (ex : jenkins image 실행)

$ docker run -d -p 8080:8080 -v /jenkins:/var/jenkins_home –name jenkins -u root jenkins

위 실행 커멘드에 대한 옵션 간단 설명

-d	detached mode 흔히 말하는 백그라운드 모드
-p	호스트와 컨테이너의 포트를 연결 (포워딩)
-v	호스트와 컨테이너의 디렉토리를 연결 (마운트)
–name	컨테이너 이름 설정
-u 실행할 사용자 지정

옵션에 대한 자세한 부분은 아래 참고

  • http://pyrasis.com/book/DockerForTheReallyImpatient/Chapter20/28

참고자료

  • https://joonyon.tistory.com/38
  • https://brunch.co.kr/@hopeless/10

IntelliJ IDEA에서 .gitignore에 파일 / 폴더를 마우스 우클릭으로 편하기 추가하기.

|

Eclipse 에서 IntelliJ IDEA로 전환시에 불편한 점 중에 하나가 .gitignore 파일에 마우스 우클릭으로 커밋에 제외할 파일을 빠르게 추가하지 못하는 것이다.
Eclipse에서는 파일 / 디렉토리를 마우스 오른쪽 버튼으로 클릭하고 ‘ .gitignore에 추가 ‘를 선택할 수 있다.

하지만 당연히 IntelliJ IDEA에서 이와 같은 것이 있고 플러그인으로 제공한다.

1. File -> Settings의 plugin으로 검색하여 거기서 또 ignore로 검색.

(Ctrl + Alt + S 단축키 사용)

search in repositories 클릭 후 검색하여 플러그인 설치.

2. intellij를 재부팅 후 설치가 완료되면 gitignore 파일의 아이콘이 변함.

gitignore 파일이 없을 경우 파일생성하라는 노란색 바가 나오게 됨.

3. 이제 파일 또는 경로를 선택 후 마우스 우측 클릭 시 gitignore에 자동으로 포함시켜 커밋대상에서 편리하게 제외시킬 수 있다.

0. 추가 : .gitignore가 작동하지 않을때 대처법

위의 내용 적용 후에 .gitignore 가 제대로 작동되지 않아 ignore처리된 파일이 커밋대상에 포함되어 나오는 문제가 발생하여 이 내용을 추가로 작성하였다.
git의 캐시가 문제가 되는거라 아래 명령어로 캐시 내용을 전부 삭제후 다시 add All한다.

한번에 처리가 안되서 한번더 반복해서 입력하니 정상적으로 적용되었다.

git rm -r --cached .
git add .

참고자료 :

  • https://code.i-harness.com/ko-kr/q/158a1da
  • https://jojoldu.tistory.com/307

```


Jenkins pipeline을 통한 AWS Elastic Beanstalk 에 배포하기 샘플

|

필자 본인이 기억하기 위한 용도로 짧게 작성하였다.

pipeline 에 대한 대략적인 내용 참고 : https://www.youtube.com/watch?v=56jtwSrNvrs

사전 준비되어 있는 부분

  • Github 사용.
  • jenkins 2.x 이상이 필요하며 파이프라인 플러그인 설치가 필요하다.
  • Elastic Beanstalk로 환경구성이 이미 되어 있다고 가정한다.

1. Jenkins 새로운 아이템 선택.

2. Jenkins 에서 아이템 네임 입력 후 Pipeline 선택.

3. General 탭에서 깃헙 프로젝트 선택 후 프로젝트 url 입력.

4. Build Trigger 탭에서 언제 빌드가 되게 할 것인지 선택

Github hook trigger GITSem polling을 선택함.

5. Pipeline 설정.

5.1. Repositories 에 URL 및 계정 추가.

5.2. 레포지토리의 branch 선택

ex) */master

5.3. 실행될 파이프라인 스크립트 경로 설정.

이 프로젝트에선 프로젝트 root 경로에 Jenkinsfile 이름의 파일에 스크립트를 지정하였다.

6. Jenkinsfile 스크립트 작성 후 git commit 후 push

6.1. 환경관련 이미지 참고용

  • s3 버킷명 (여기선 S3버킷이름으로 표시)

  • Beanstalk 어플리케이션이름 및 환경이름 참고 (해당 경로에 있는 이름대로 아래 스크립트에 포함시키면 된다.)

6.2. 작성한 Jenkinsfile 스크립트 파일

pipeline {
    agent any
    environment {
        // Slack configuration
        SLACK_COLOR_DANGER  = '#E01563'
        SLACK_COLOR_INFO    = '#6ECADC'
        SLACK_COLOR_WARNING = '#FFC300'
        SLACK_COLOR_GOOD    = '#3EB991'
    } // environment
    stages {
        // WAR 파일로 빌드 (테스트 부분 스킵..)
        stage('Build War') {
            steps {
                sh 'pwd'
                sh 'mvn -B -DskipTests clean package'
            }
        }
        stage('Test') {
            steps {
                echo 'Testing'
            }
        }
        // S3에 먼저 업로드 후 Deploy 진행
        stage('Upload S3') {
            steps {
                echo 'Uploading'
                sh 'aws s3 cp /var/lib/jenkins/workspace/프로젝트명/target/프로젝트.war s3://S3버킷이름/${JOB_NAME}-${GIT_BRANCH}-${BUILD_NUMBER}.war \
                    --acl public-read-write \
                    --region ap-northeast-2' //서울리전
            }
        }
        stage('Deploy') {
            steps {
                echo 'Deploying'
                sh 'aws elasticbeanstalk create-application-version \
                    --region ap-northeast-2 \ 
                    --application-name 어플리케이션이름 \
                    --version-label ${JOB_NAME}-${BUILD_NUMBER} \
                    --description ${BUILD_TAG} \
                    --source-bundle S3Bucket="S3버킷이름",S3Key="${JOB_NAME}-${GIT_BRANCH}-${BUILD_NUMBER}.war"'
                sh 'aws elasticbeanstalk update-environment \
                    --region ap-northeast-2 \
                    --environment-name 환경이름 \
                    --version-label ${JOB_NAME}-${BUILD_NUMBER}'
            }
        }
    }
    post {
        always {
            echo 'This will always run'
        }
        // 성공 시 슬랙 #tickets 채널에 성공 메세지 보내기
        success {
            echo 'This will run only if successful'
            echo 'Pushing EBS'
            slackSend (color: "${env.SLACK_COLOR_GOOD}",
                channel: "#tickets",
                message: "*SUCCESS:* Job ${env.JOB_NAME} build ${env.BUILD_NUMBER} by ${env.USER_ID}\n More info at: ${env.BUILD_URL}")

        }
        // 실패 시 슬랙 #tickets 채널에 성공 메세지 보내기
        failure {
            echo 'This will run only if failed'
            //슬랙 #tickets 채널에 실패 메세지 보내기
            slackSend (color: "${env.SLACK_COLOR_DANGER}",
                channel: "#tickets",
                message: "*FAILED:* Job ${env.JOB_NAME} build ${env.BUILD_NUMBER} by ${env.USER_ID}\n More info at: ${env.BUILD_URL}")
        }
        unstable {
            echo 'This will run only if the run was marked as unstable'
        }
        changed {
            echo 'This will run only if the state of the Pipeline has changed'
            echo 'For example, if the Pipeline was previously failing but is now successful'
        }
    }
}