OpenStack의 Gerrit의 Jenkins의 job은 어디에 정의되어 있습니까?

10303 단어 openstack
지금까지 수차례 OpenStack에 흠뻑 패치를 낸 적이 있지만, 가끔 자신의 패치와는 관계가 없는 곳에서 테스트가 실패해 버려 병합되지 않는 것이 있다.

그럴 때, 평소라면 누군가 '대단한 사람'이 고쳐 줄 것이라고 생각하고, 그 백엔드의 테스트 구조를 생각한 적이 없었다.

그러나, 그럼 조금 기분 나쁘기 때문에, 조금 정도 뒤의 구조를 알아 두자.

그런 이유로, Gerrit의 Jenkins의 job은 어디에서 정의되고 있는 것일까.

OpenStack(Gerrit)에 패치를 내면 이런 일이 나올 것



우선은, 원래 어디의 이야기를 하고 있는지를, 안녕.

Gerrit(OpenStack의 CodeReview 시스템)에 패치를 내면 오른쪽에 Jenkins Check라는 것이 표시된다. 여기가 어떻게 되어 있는가.



각 작업의 세부 사항은 어디에서 볼 수 있습니까?



OpenStack의 jenkins 서버가 7대 있는 것 같다.

  • https://jenkins < 01-07 >.openstack.org/

  • 각 job의 화면은/job/< jobname > 에서 볼 수 있다.

    기본적으로, jenkins의 job의 log의 link가 gerrit에 붙여지기 때문에, 직접 jenkins를 보러 가는 것은 없다고 생각하지만 일단 존재는 알고 있던 것이 좋을 것이다.

    다음 질문,
  • 각 작업이 무슨 일을하고 있는지 잘 모르겠습니다
  • 프로젝트와 job의 연관성을 잘 모른다

  • 프로젝트와 job의 대응에 대해



    무슨 말을 하고 싶은지 말하면, 예를 들어 neutron의 패치를 테스트할 때, 어떤 job을 맞추고, nova의 테스트를 할 때는, 어떤 job을 맞추라고 하는 것을 어디에서 관리하고 있는 것인가? 라고 이야기.

    분명히 openstack-infra/project-config에서 jenkins 설정이 관리되는 것 같습니다.
    그 안의 zuul/layout.yaml 로 각 프로젝트에서 실행하는 job 가 정의되고 있다.

    zuul/layout.yaml
    省略
    ------
     - name: openstack/rally
        template:
          - name: merge-check
          - name: python-jobs
          - name: python26-jobs
          - name: python3-jobs
          - name: check-requirements
          - name: docs-on-rtfd
          - name: publish-to-pypi
        check:
          - rally-coverage
          - gate-rally-install-bare-centos6
          - gate-rally-install-bare-precise
          - gate-rally-dsvm-rally
          - gate-rally-dsvm-rally-cinder
          - gate-rally-dsvm-rally-heat
          - gate-rally-dsvm-rally-nova
          - gate-rally-dsvm-neutron-rally
          - gate-rally-dsvm-neutron-unstable
    ------
    省略
    

    이러한 세부 설정은 jenkins/jobs의 파일에 정의되어 있습니다.

    그래서,

    하나의 작업의 처리 내용을 살펴 보겠습니다.



    여기서는 독단과 편견으로 gate-rally-dsvm-rally-nova를 살펴본다.

    이것은 jenkins/jobs/rally.yaml에 정의가 있습니다.

    jenkins/jobs/rally.yaml
    省略
    ---- 580L
    - job-template:
        name: 'gate-rally-dsvm-rally-{service}'
        node: 'devstack-precise || devstack-trusty'
    
        wrappers:
          - build-timeout:
              timeout: 125
          - timestamps
    
        builders:
          - devstack-rally-gate:
              scenario: '{service}'
              ironic: '0'
              neutron: '{neutron}'
              zaqar: '0'
              large_ops: '0'
    
        publishers:
          - devstack-logs
          - console-log
          - rally-plot
    ---- 602L
    省略
    
    

    이것을 읽는 방법은 분위기에서 알 수 있다고 생각한다.
    builders가 테스트 내용이 되고 있다. 여기서는 devstack-rally-gate를 지정하고 구체적인 처리 내용은 다른 곳에 쓰여있다 (뭐 함수 같은 것)

    동일한 파일의 45행에 정의되어 있습니다.

    jenkins/jobs/rally.yaml
    省略
    ---- 45L
    - builder:
        name: devstack-rally-gate
        builders:
          - link-logs
          - devstack-checkout
          - shell: |
              #!/bin/bash -xe
              export PROJECTS="openstack/rally $PROJECTS"
              export PROJECTS="openstack/ceilometer $PROJECTS"
              export CEILOMETER_NOTIFICATION_TOPICS=notifications,profiler
              export DEVSTACK_GATE_NEUTRON={neutron}
              export DEVSTACK_GATE_IRONIC={ironic}
              export DEVSTACK_GATE_ZAQAR={zaqar}
              export DEVSTACK_GATE_TEMPEST_LARGE_OPS={large_ops}
              export DEVSTACK_GATE_EXERCISES=0
              export DEVSTACK_GATE_TIMEOUT=120
              export DEVSTACK_LOCAL_CONFIG="enable_plugin sahara git://git.openstack.org/openstack/sahara"
              export RALLY_SCENARIO={scenario}
              ENABLED_SERVICES=sahara,key,horizon,
              ENABLED_SERVICES+=cinder,c-api,c-vol,c-sch,c-bak
              ENABLED_SERVICES+=g-api,g-reg,
              ENABLED_SERVICES+=heat,h-api,h-api-cfn,h-api-cw,h-eng,
              ENABLED_SERVICES+=n-api,n-crt,n-obj,n-cpu,n-sch,n-cond,
              ENABLED_SERVICES+=s-proxy,s-account,s-container,s-object,
              ENABLED_SERVICES+=ceilometer-acompute,ceilometer-acentral,ceilometer-api,
              ENABLED_SERVICES+=ceilometer-anotification,ceilometer-collector,
              ENABLED_SERVICES+=ceilometer-alarm-evaluator,ceilometer-alarm-notifier,
              if [ $DEVSTACK_GATE_NEUTRON -ne 1 ]; then
                  ENABLED_SERVICES+=n-net,n-api-meta,
              fi
              if [ $DEVSTACK_GATE_IRONIC -ne 0 ]; then
                  ENABLED_SERVICES+=ironic,ir-api,ir-cond,
              fi
              export ENABLED_SERVICES
              # TODO(mrostecki): Remove this if statement after implementing
              # Devstack plugin in Rally.
              if [ -d $BASE/new/rally/devstack ]; then
                  # New-style Devstack integration
                  export DEVSTACK_LOCAL_CONFIG="enable_plugin rally git://git.openstack.org/openstack/rally"
              else
                  # Old-style Devstack integration
                  ENABLED_SERVICES+=rally,
                  function pre_test_hook {{
                      # Install rally-devstack integration
                      cp -r $BASE/new/rally/contrib/devstack/* $BASE/new/devstack/
                  }}
                  export -f pre_test_hook
              fi
              function post_test_hook {{
                  $BASE/new/rally/tests/ci/rally-gate.sh
              }}
              export -f post_test_hook
              cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
              ./safe-devstack-vm-gate-wrap.sh
    
    ----
    省略
    

    link-logs라든지 devstack-check라든지 여기서도, 또 다른 builder를 참조하고 있다.
    여러가지 파일로부터 불리는 것이 상정되고 있다, builder는, jenkins/jobs/macros.yaml 에 정의되고 있으므로, 거기를 보면 좋다.

    빈번하게, 커밋하는 프로젝트라든가는, 일대로 job를 봐 두는 것이 좋을지도.

    좋은 웹페이지 즐겨찾기