Jenkins&Docker로 Python의 유닛 테스트를 깨끗한 환경에서 실행할 수 있도록 했다.

개요



이전, Jenkins&Docker로 깨끗한 Angular6 앱의 빌드 환경을 구축해 보았다.에서 빌드 환경을 깨끗하게 해보고, 그럼 유닛 테스트도 깨끗한 환경에서 할 수 있도록 하려고 생각했기 때문에 해 본 이야기.

이번 대상은 Python으로, PEP8에서 정적 해석, nosetests로 유닛 테스트를 실시해, 결과를 Jenkins상에 출력했다.

전제



환경은 Angular6를 빌드하게 한 Jenkins를 재사용한다.





OS
Amazon Linux 2(ami-a9d09ed1)

Jenkins
jenkins.noarch-2.121.2-1.1

도커
docker-ce-18.06.0

git
git-2.9.5

Jenkins-plugin
WarningsPublisher

Jenkins-plugin
CoberturaPublisher

Jenkins-plugin
JUnitResultArchiver


설정 내용



이번 이용하는 프로젝트는, https://github.com/domenkozar/nose-selecttests를 포크했습니다.
여기, htps : // 기주 b. 코 m / 타츠 아키미 타니 / 노 세세 C

Dockerfile



Dockerfile의 내용은 이쪽.

Dockerfile.build
FROM centos:7

# Install Python and Node.js
RUN yum install -y https://centos7.iuscommunity.org/ius-release.rpm epel-release
RUN yum install -y wget unzip iproute python36u python36u-libs python36u-devel python36u-pip nodejs npm java

# Install tools
RUN pip3.6 install pyyaml boto3
RUN pip3.6 install flake8 nose coverage

ENV EXEC_ENV=TEXT

Jenkinsfile 설정



Jenkinsfile의 내용은 이쪽.
pipeline {

    environment {
        docker_image_name = "python3-unittests"
    }

    agent {
        dockerfile {
            filename 'Dockerfile.build'
            dir '.'
            label env.docker_image_name
        }
    }

    stages {

        stage('静的解析') {
            steps {
                parallel(
                    'Pep8': {
                        dir('.') {
                            script {
                                sh 'flake8 . --select=E101,E113,E125,E129,E304,E7,F4,F8,N8 --max-line-length=120 || true'
                            }
                            step([
                                $class: 'WarningsPublisher',
                                consoleParsers: [
                                    [parserName: 'Pep8']
                                ]
                            ])
                        }
                    }
                )
            }
        }

        stage('ユニットテスト') {
            steps {
                script {
                    dir('.') {
                        sh 'nosetests -v --with-xunit --with-coverage --cover-inclusive --cover-erase --cover-tests --cover-branches  --cover-xml --cover-package=functional_tests,noseselecttests || true'
                    }
                }
                step([
                    $class: 'JUnitResultArchiver',
                    testResults: 'nosetests.xml'
                ])
                step([
                    $class: 'CoberturaPublisher',
                    autoUpdateHealth: false,
                    autoUpdateStability: false,
                    coberturaReportFile: 'coverage.xml',
                    failUnhealthy: false,
                    failUnstable: false,
                    maxNumberOfBuilds: 0,
                    onlyStable: false,
                    zoomCoverageChart: false
                ])
                archiveArtifacts 'nosetests.xml'
                archiveArtifacts 'coverage.xml'
            }
        }

    }
}

Jenkins 작업 설정



파이프라인을 선택합니다.


파이프라인 설정에서 [Pipeline script from SCM]⇒[Git]⇒[]를 입력하고 [완료] 버튼을 클릭합니다.



작업 실행



작업 실행이 성공하면, 다음과 같이 파이프 라인 결과 및 커버리지가 출력된다.



또, 복수회 실행하면 처음으로 PEP8과 테스트 결과, 커버리지의 그래프가 표시가 출현하는 것을 알 수 있다.



끝.

좋은 웹페이지 즐겨찾기