본문 바로가기

4.개발 및 운영 환경

[jenkins] pipeline 사용하기

Jenkins의 pipeline을 사용해서 빌드 시퀀스 만들어보자.

작성자: ospace114@empal.com, http://ospace.tistory.com/

Plugins

  • Parameterized Trigger Plugin: 변수기반(버전 정보, 빌드/패키지 세부 정보를)으로 다운스트림으로 전달)
  • Promoted Build Plugin: 특정 빌드를 향후 테스트나 릴리즈용으로 만드는 방법
  • Post build task plugin: 피드백 루프(상태 자동 알림)를 구현할 때 스크립트를 실행하거나 다운 스트림 작업 상태에 따라 전자메일 보냄.
  • Delivery pipeline pluing: 파이프라인에 대한 고수준의 실시간 개요 상태 제공

기본 시퀀스

기본적인 빌드 시퀀스를 생성해보았다.

node {
    def GIT_URL = "http://git.trgtech.myds.me/360Station/admin.git"
    def REMOTE_DIR = "/usr/local/www/360station_admin"

    stage('Ready') {
        git branch:'develop', credentialsId:'ac28d946-afbc-4cf5-9085-adb55803ff0e', url:"${GIT_URL}"
    }
    stage("Build") {
        sh "mvn -Dmaven.test.skip=true clean compile"
    }
    stage("Package") {
        sh "mvn package"
    }
    stage("Deploy") {
        VERSION = readMavenPom().getVersion()
        ARTIFACT = readMavenPom().getArtifactId();
        DEPLOY_FILE = "${ARTIFACT}-${VERSION}.war"
        sh "echo 'Depoly ${DEPLOY_FILE}...'"
        sshagent (credentials:['af0a483c-162b-468d-a755-36ff16b05012']) {
            sh """
                ssh -v -o StrictHostKeyChecking=no -l root 192.168.0.10 uname -a
                scp target/${DEPLOY_FILE} root@192.168.0.10:${REMOTE_DIR}
                ssh -o StrictHostKeyChecking=no -l root 192.168.0.10 "
                   ln -sf ${DEPLOY_FILE} ${REMOTE_DIR}/${ARTIFACT}.war
                   ${REMOTE_DIR}/360admin.sh restart
                "
            """
        }
    }
}

readMavenPom을 사용하고 싶다면 pipeline utility steps 플러그인 설치
sshagent 사용상 주의사항으로 username/password 방식은 사용이 불가. ssh 자체에서 미지원하기 때문에 키기반으로 처리해야함.
만약 username/password 방식을 사용할 경우 sshpass을 사용해야하고 젠킨스의 credentials을 사용할 수 없고 직접 password을 입력해야함.

sshpass -p 'psssword' ssh …

Publish Over SSH 플러그인 설치

SSH 서버 설정은 Manage Jenknins > Configure System에서 Publish over SSH 항목
상단에 jenkins에서 사용할 공통 키를 입력할 수 있고, SSH Server 추가시 키가 다른 경우 별도로 입력할 수 있음.

젠킨스의 특정 Job의 빌드 히스토리 작업 모두 제거

item = Jenkins.instance.getItemByFullName("Foo")
item.builds.each() { build ->
  build.delete()
}
item.updateNextBuildNumber(1)

참고

[1] https://shortstories.gitbooks.io/studybook/content/jenkins\_pipeline\_c0bd\_c9c8\_ae30.html
[2] https://www.jenkins.io/doc/pipeline/examples/

반응형

'4.개발 및 운영 환경' 카테고리의 다른 글

구글 FCM 사용하기  (2) 2023.10.23
[Linux] Debian 데비안에서 Bluetooth 구성  (0) 2022.12.17
[jenkins] JNLP 사용하기  (0) 2021.11.12
[jenkins] LDAP 설정  (0) 2021.11.12
[docker] docker image 다이어트하기  (0) 2021.05.05