문제

이것은 약간의..헛된 질문이지만,BuildBot 의 출력이 없어서..

예를 들어,에 비해..

고,다른 사람 BuildBot 보이는 오히려..고풍

나는 현재 재생 중인 허드슨이지만,그것은 매우 Java 중심(만 이 가이드, 에,나는 그것을 발견하게 설치보다 BuildBot,생산과 더 많은 정보)

기본적으로:은 거기에 모든 지속적인 통합 시스템을 목표로 python,는 많이 생산하는 빛나는 그래프와 좋아?


업데이트: 이 시간 이후 Jenkins 프로젝트로 대체했 허드슨으로 커뮤니티 버전의 패키지입니다.원래 저자가 이 프로젝트뿐만 아니라.Jenkins 가 표준 패키지에서 Ubuntu/Debian,RedHat/페도라/CentOS,및 다른 사람입니다.다음 업데이트가 기본적으로 정확하다.시작점을 이렇게 Jenkins 은 다릅니다.

업데이트: 해 몇 가지 대안을 생각 나는 허드슨. 무결성 고 간단하지만,매우 제한됩니다.나는 생각한 Buildbot 에 더욱 적합합하는 수많은 빌드-노예가 아닌 모든 실행하는 단일 머신에서 다음과 같 내가 사용하고 있었습니다.

설정에 허드슨한 Python 프로젝트는 매우 간단하다:

  • 다운로드에서 허드슨 http://hudson-ci.org/
  • 실행 java -jar hudson.war
  • 웹 인터페이스에서 기본 주소 http://localhost:8080
  • 이동을 관리하,허드슨 플러그인 업데이트"를 클릭하십시오"또는 이와 유사한
  • 설치 Git 플러그인(을 설정 git 경로에서 허드슨 글로벌 환경)
  • 새 프로젝트를 만들고 입력,저장소,SCM 간격으로 폴링과
  • 설치 nosetests via easy_install 되지 않은 경우
  • 에서 빌드 단계,추가 nosetests --with-xunit --verbose
  • 체크"게시 JUnit 테스트 결과를 보고"설정"테스트 보고서는 Xml"하기 **/nosetests.xml

그는 모두 필요합니다.당신은 설정할 수 있 이메일 알림 플러그인 가치가 있습니다.몇 나는 현재 사용하는 파이썬 프로젝트:

  • SLOCCount 플러그인 계산 라인의 코드(그리고 아름다운 그래프를 그린다.) -당신은 필요 설치 sloccount 별도로
  • 분석 PyLint 출력(설정할 수 있습니다 경고 임계값,그래프의 수는 위반이 서로를 통해 구축)
  • Cobertura 할 수 있는 구문 분석 coverage.py 출력됩니다.Nosetest 수집할 수 있는 범위를 실행하는 동안 당신의 테스트 사용 nosetests --with-coverage (이 출력이 작성 **/coverage.xml)
도움이 되었습니까?

해결책

체크 아웃하고 싶을 수도 있습니다 그리고 Xunit 출력 플러그인. 단위 테스트를 실행 하고이 명령을 사용하여 적용 범위 확인을 수행 할 수 있습니다.

nosetests --with-xunit --enable-cover

Jenkins 경로로 가고 싶거나 Junit 테스트보고를 지원하는 다른 CI 서버를 사용하려는 경우 도움이됩니다.

마찬가지로 Jenkins의 위반 플러그인

다른 팁

그것이 할 것인지 모르겠다 : 물린 TRAC를 작성하고 TRAC와 통합되는 사람들이 만들어냅니다. 아파치 검프 Apache가 사용하는 CI 도구입니다. 파이썬으로 작성되었습니다.

우리는 큰 성공을 거두었습니다 TeamCity CI 서버 및 코를 테스트 러너로 사용합니다. NoSetests 용 TeamCity 플러그인 카운트 패스/실패, 실패 테스트에 대한 읽기 쉬운 디스플레이 (이메일을 보낼 수 있음)를 제공합니다. 스택이 실행중인 동안 테스트 실패의 세부 사항을 볼 수도 있습니다.

물론 여러 컴퓨터에서 실행하는 것과 같은 것들이 지원되며 BuildBot보다 설정 및 유지 관리가 훨씬 간단합니다.

BuildBot의 폭포 페이지는 상당히 예전 할 수 있습니다. 여기에 좋은 예가 있습니다 http://build.chromium.org/buildbot/waterfall/waterfall

아틀라 시안의 대나무 또한 체크 아웃 할 가치가 있습니다. 전체 Atlassian Suite (Jira, Confluence, Fisheye 등)는 꽤 달콤합니다.

이 실이 꽤 오래되었다고 생각하지만 여기 Hudson과 함께합니다.

나는 PIP와 함께 가서 레포를 설정하기로 결정했습니다 (고통 스럽지만 잘 보이는 Eggbasket). Hudson은 성공적인 테스트를 통해 자동 업로드합니다. 다음은 Hudson Config와 함께 사용하기위한 거칠고 준비된 스크립트입니다 : /var/lib/hudson/venv/main/bin/hudson_script.py -w $ workspace -p my.package -v $ build_number와 같은 스크립트를 실행하십시오. **/coverage.xml, pylint.txt 및 nosetests.xml 구성 비트에서 :

#!/var/lib/hudson/venv/main/bin/python
import os
import re
import subprocess
import logging
import optparse

logging.basicConfig(level=logging.INFO,
                    format='%(asctime)s %(levelname)s %(message)s')

#venvDir = "/var/lib/hudson/venv/main/bin/"

UPLOAD_REPO = "http://ldndev01:3442"

def call_command(command, cwd, ignore_error_code=False):
    try:
        logging.info("Running: %s" % command)
        status = subprocess.call(command, cwd=cwd, shell=True)
        if not ignore_error_code and status != 0:
            raise Exception("Last command failed")

        return status

    except:
        logging.exception("Could not run command %s" % command)
        raise

def main():
    usage = "usage: %prog [options]"
    parser = optparse.OptionParser(usage)
    parser.add_option("-w", "--workspace", dest="workspace",
                      help="workspace folder for the job")
    parser.add_option("-p", "--package", dest="package",
                      help="the package name i.e., back_office.reconciler")
    parser.add_option("-v", "--build_number", dest="build_number",
                      help="the build number, which will get put at the end of the package version")
    options, args = parser.parse_args()

    if not options.workspace or not options.package:
        raise Exception("Need both args, do --help for info")

    venvDir = options.package + "_venv/"

    #find out if venv is there
    if not os.path.exists(venvDir):
        #make it
        call_command("virtualenv %s --no-site-packages" % venvDir,
                     options.workspace)

    #install the venv/make sure its there plus install the local package
    call_command("%sbin/pip install -e ./ --extra-index %s" % (venvDir, UPLOAD_REPO),
                 options.workspace)

    #make sure pylint, nose and coverage are installed
    call_command("%sbin/pip install nose pylint coverage epydoc" % venvDir,
                 options.workspace)

    #make sure we have an __init__.py
    #this shouldn't be needed if the packages are set up correctly
    #modules = options.package.split(".")
    #if len(modules) > 1: 
    #    call_command("touch '%s/__init__.py'" % modules[0], 
    #                 options.workspace)
    #do the nosetests
    test_status = call_command("%sbin/nosetests %s --with-xunit --with-coverage --cover-package %s --cover-erase" % (venvDir,
                                                                                     options.package.replace(".", "/"),
                                                                                     options.package),
                 options.workspace, True)
    #produce coverage report -i for ignore weird missing file errors
    call_command("%sbin/coverage xml -i" % venvDir,
                 options.workspace)
    #move it so that the code coverage plugin can find it
    call_command("mv coverage.xml %s" % (options.package.replace(".", "/")),
                 options.workspace)
    #run pylint
    call_command("%sbin/pylint --rcfile ~/pylint.rc -f parseable %s > pylint.txt" % (venvDir, 
                                                                                     options.package),
                 options.workspace, True)

    #remove old dists so we only have the newest at the end
    call_command("rm -rfv %s" % (options.workspace + "/dist"),
                 options.workspace)

    #if the build passes upload the result to the egg_basket
    if test_status == 0:
        logging.info("Success - uploading egg")
        upload_bit = "upload -r %s/upload" % UPLOAD_REPO
    else:
        logging.info("Failure - not uploading egg")
        upload_bit = ""

    #create egg
    call_command("%sbin/python setup.py egg_info --tag-build=.0.%s --tag-svn-revision --tag-date sdist %s" % (venvDir,
                                                                                                              options.build_number,
                                                                                                              upload_bit),
                 options.workspace)

    call_command("%sbin/epydoc --html --graph all %s" % (venvDir, options.package),
                 options.workspace)

    logging.info("Complete")

if __name__ == "__main__":
    main()

물건을 배포 할 때 다음과 같은 작업을 수행 할 수 있습니다.

pip -E /location/of/my/venv/ install my_package==X.Y.Z --extra-index http://my_repo

그리고 사람들은 다음을 사용하여 물건을 개발할 수 있습니다.

pip -E /location/of/my/venv/ install -e ./ --extra-index http://my_repo

이 물건은 Setup.py와 종속성이 모두 설정된 패키지 당 레포 구조를 가지고 있다고 가정하면 트렁크를 확인 하고이 내용을 실행할 수 있습니다.

나는 이것이 누군가를 도울 수 있기를 바랍니다.

------업데이트---------

Hudson과 정말 잘 맞는 epydoc을 추가했습니다. HTML 폴더로 구성에 Javadoc을 추가하십시오.

PIP는 요즘 -E 플래그를 제대로 지원하지 않으므로 Venv를 별도로 만들어야합니다.

다른 것 : 빛나는 팬더 파이썬을위한 호스팅 도구입니다

호스팅 된 CI 솔루션을 고려하고 오픈 소스를 수행하는 경우 조사해야합니다. 트래비스 CI 또한 - Github와 매우 잘 통합되어 있습니다. 루비 도구로 시작하는 동안 Python 지원이 추가되었습니다 얼마 전에.

신호는 또 다른 옵션입니다. 그것에 대해 더 많이 알고 비디오를 볼 수 있습니다. 여기.

나는 고려할 것이다 Circleci - 파이썬 지원이 뛰어나고 매우 예쁜 출력이 있습니다.

연속체 빈스타 이제 Github에서 빌드를 트리거 할 수 있으며 Linux, OSX 및 Windows (32 / 64)를 위해 컴파일 할 수 있습니다. 깔끔한 것은 실제로 배포와 지속적인 통합을 밀접하게 밀접하게 사용할 수 있다는 것입니다. 그것은 t를 건너고 I의 통합을 점령하고 있습니다. 이 사이트, 워크 플로 및 도구는 실제로 세련되며 Afaik Conda는 복잡한 파이썬 모듈을 배포하는 가장 강력하고 피스닉적인 방법입니다. 그리고 C/C ++/Fotran 라이브러리를 배포하십시오.

우리는 물린 것을 꽤 많이 사용했습니다. 그것은 예쁘고 TRAC와 잘 통합되지만, 비표준 워크 플로우가있는 경우 맞춤화하는 것은 엉덩이의 고통입니다. 또한 인기있는 도구만큼 플러그인이 많지 않습니다. 현재 우리는 허드슨을 대체품으로 평가하고 있습니다.

확인하다 rultor.com. 처럼 이 기사 설명하면, 모든 빌드에 Docker를 사용합니다. 덕분에 Python을 포함하여 Docker 이미지 내에서 원하는 것을 구성 할 수 있습니다.

작은 조,난제를 구축하는 솔루션은 다음과 같이 클라이언트를 원하는 방법을 자동으로 테스트 및 배포 코드 git push plus 관리 티켓 자식을 통해 노트입니다.이것은 또한 이어질 내에서 작동 는 것을 목표로 프로젝트.

하나는 쉽게 그냥 설정 베어 노드 시스템에는 사용자와 관리를 통해 구축 make(1), expect(1), crontab(1)/systemd.unit(5), 고 incrontab(1).수도 추가 단계와 사용 ansible 와 셀러리 등 빌드와 gridfs/nfs 파일을 저장합니다.

지만,나는 것 기대하지 않는 사람 이외의 다른 Graybeard UNIX 남자 또는 원리 수준 engineer 실제로까지.그냥 좋은 아이디어 및 잠재적인 학습 경험하기 때문에 빌드 서버는 아무것도 더 이상 방법을 임의로 실행 스크립트 작업을 자동화 패션이다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top