멋진 Jenkinsfile로 활성화된 CI/CD 및 GitOps에 대한 필수 사항

4783 단어
매일 코드를 푸시하고 다른 환경에 배포하는 많은 개발자가 있습니다.
때때로 그들은 세부 사항을 알아차리지 못하지만 이 코드가 어떻게 배포됩니까? 파이프라인이 다른 환경에 배포되는 모습은 어떻습니까? 우리는 충분한 코드 품질 검사를 실행하고 있습니까? 그것을 구축하고 배포하기 위해 취한 단계는 무엇입니까?

어떻게 할 수 있는지에 대한 더 넓은 비전을 얻기 위해(그리고 그것은 그것을 하는 한 가지 방법일 뿐임) Jenkins, CI/CD 및 GitOps가 무엇이며 Jenkins 파이프라인이 어떻게 생겼는지에 대해 조금 더 명확히 합시다.

Jenkins, CI/CD 및 GitOps



아시다시피 Jenkins is a very popular and complete tool CI/CD 프로세스와 관련된 빌드, 배포 및 스크립트를 관리합니다.

CI/CD stands for continuous integration and continuous delivery 최종 고객에게 빈번한 소프트웨어 제공을 목표로 합니다. 새로운 기능을 구현하고 다양한 수준의 테스트 및 품질 코드 항목(린트, 정적 코드 분석 등)을 실행한 다음 이 새로운 코드를 아무 것도 손상시키지 않고 다른 환경에 통합하는 전체 애플리케이션 수명 주기에 대해 생각해 보십시오.

Now GitOps comes tied together to the DevOps world 모든 버전 기록 및 최신 업데이트된 구현과 함께 프로세스의 실제 구현에 대한 모든 세부 정보(예: 파이프라인 및 자동화 스크립트)를 Git/VCS에 유지하려는 마음가짐을 가져옵니다.
그 이상으로 협업, 규정 준수 및 자동화된 방식으로 버전이 지정된 스크립트를 기반으로 인프라를 프로비저닝할 수 있습니다(애플리케이션에 대해 수행하는 것과 동일).

우리는 애플리케이션 파이프라인의 모든 변경 사항과 가장 업데이트된 버전을 추적하고 싶기 때문에 Jenkins는 Jenkinsfile을 사용하여 빌드에서 배포까지 각 단계를 정의할 수 있도록 합니다.

Jenkinsfile이 어떻게 생겼는지에 대한 간단하고 효과적인 예



간단히 말해서 Jenkinsfile을 사용하면 선언적/스크립팅된 파이프라인에 필요한 모든 로직을 유연하게 작성할 수 있으며 모든 변경 기록과 함께 배포 및 CI/CD가 어떻게 보이는지에 대한 단일 정보 소스를 대부분 유지할 수 있습니다.

아래에서 볼 수 있듯이 이 파이프라인이 작동하는 방식에는 마법이 없습니다.
도구, AWS 환경 변수, 기본 maven 설치(mvn 명령)와 같은 Jenkins 사전 구성 항목을 암시적으로 사용합니다.
그 외에는 각 단계와 끝에서 끝까지 실행하기 위해 수행된 모든 단계를 볼 수 있습니다. 숨겨진 세부 정보가 없습니다.

pipeline {
    agent any
    options {
        timeout(time: 10, unit: 'MINUTES') // you can set a global pipeline timeout
    }
    tools {
        jdk "jdk8" // you can use pre-configured Jenkins tools
    }
    environment {

        // using pre-configured Jenkins environment variables
        awsKey = "${env.AWS_ACCESS_KEY_ID}"
        awsSecretKey = "${env.AWS_SECRET_ACCESS_KEY}"
        awsRegion = "${env.AWS_DEFAULT_REGION}"

        isDevEnvironment = true
        shouldCreateTag = false
    }

    stages {
        stage('Initialize') {
            steps {
                script {
                    isBranchValid = ['master', 'feature/', 'hotfix/', 'bugfix/'].any { standard_branch -> env.BRANCH_NAME.startsWith(standard_branch) }
                    if (!is_branch_valid) {
                        error("You couldn't have a branch named like that!")
                    }
                }
            }
        }
        stage('Build') {
            options {
                timeout(time: 5, unit: 'MINUTES') // you can set a stage specific timeout
            }
            steps {
                sh 'mvn clean package -DskipTests -U'
            }
        }
        stage("Unit Tests") {
            steps {
                sh "mvn test"
            }
        }
        stage('Create tag') {
            when {
                expression { return env.shouldCreateTag }
            }
            steps {
                nextTag = createTag()
                echo "Created tag as [${nextTag}]!"
            }
        }
        stage("Deploy DEV") {
            when {
                expression { return env.isDevEnvironment }
            }
            steps {
                echo "Deploying to DEV..."
                deploy()
            }
        }

    }
    post {
        always {
            cleanWs() // post.always will run at the end
        }
    }
}

Boolean deploy() {
    // do some logic to deploy..
}

String createTag() {
    // logic to create a new Git tag..
}


그런 다음 새 Jenkins 작업을 연결하여 git 리포지토리에서 Jenkinsfile을 읽은 다음 실제 파이프라인에서 전환됩니다.



결론



Jenkins 파이프라인을 설정하는 방법에 대해 인터넷을 통해 많은 이야기, 샘플 코드 및 연습이 있습니다. 해결하려는 문제가 무엇인지 먼저 이해하고 해결해야 합니다.

Jenkins pipeline documentation은 파이프라인 구문, 선언적 대 스크립트 파이프라인, 모범 사례 등과 같은 세부 정보를 자세히 살펴볼 수 있는 좋은 장소입니다.


  • This was first posted by me on Hashnode tech blogging platform.
  • 좋은 웹페이지 즐겨찾기