어떻게 구름ci/gcp에서 다중 노드 모듈을 이식하고 실행합니까

GCP의 다중 노드 모듈


소개하다.
puppet 용어에서 통합 테스트는 많은 VM/컨테이너를 설정하고 상호 작용을 테스트하는 곳입니다.이 가능하다, ~할 수 있다,...
  • PE를 설치하고 괴뢰 대리인을 설치하여 대화한다.
  • NTP 서버를 설정하고 일부 NTP 클라이언트를 등록합니다.
  • puppet 서버를 설치하고 여러 개의 puppet 에이전트를 설치한다.
  • 테스트의 순서는 매우 중요하기 때문에 한 시스템에서 테스트를 실행할 수 있는 것이 매우 중요하다.
    설계
    다음 워크플로우를 사용하여 클라우드 CI/GCP에서 다중 노드 모듈을 실행합니다.
  • 공급 - 공급 임무를 테스트 공급 노드로 사용합니다.
  • 공급 시스템 설정 - 우리는bolt퀘스트/계획을 사용하여 다중 노드 환경을 설정하여 테스트를 진행한다.
  • 테스트 실행 - 기존 서버spec/litmus 도움말 프로그램을 사용하여 모듈 테스트에 필요한 의존항과 설정을 설정합니다.
  • 해체-공급임무로 기계를 해체합니다.
  • 각 단계를 자세히 살펴보겠습니다.
    공급하다
    Litmus에서는 작업을 통해 vm/컨테이너를 구성할 수 있습니다.우리는 테스트 환경을 가속화하기 위해 공급 모듈available tasks을 사용한다.런타임 시 리트머스 인벤토리가 생성됩니다.이 vm/용기와 통신할 수 있는yaml 파일 boltserverspec 을 허용합니다.
    우리는 어떻게 서로 다른 vm/용기를 구분합니까?프로비저닝 모듈의 프로비저닝 작업을 통해 볼트 프로비저닝 파일에 임의의 키/쌍을 추가할 수 있습니다.볼트 변수를 사용하면 사용자가 한 기계와 연결된 여러 개의 라벨을 가질 수 있다.
    수동 또는 볼트 계획을 통해 볼트 공급 임무를 운행하면 우리는 기계를 표시할 수 있다.
    Example_websphere_provision_plan
    구성된 시스템 설정
    검수 테스트에서 리트머스의 설치는 세 가지 일에 의존한다.
  • 설치 에이전트 - puppet 에이전트를 설치한 모듈에 설치된 볼트task.
  • Install module(설치 모듈) - pdk를 사용하여 피측 모듈을 구축하고 대상 VM/컨테이너에 설치하는 라크 작업
  • 규범/규범, 도움말, 검수, 현지.rb- 테스트 모듈에 필요한 추가 설정(예: puppetlabs/puppetlabs-apache
  • 집적 테스트에 있어서 우리는 볼트 계획과 재고 변수를 사용하고 표기 시스템을 통해 특정 시스템에 대해puppet 코드/명령을 실행할 수 있다.하나의 예puppetlabs-websphere_application_server
    공급 계획 예
    plan websphere_application_server::provision_machines(
      Optional[String] $using = 'abs',
      Optional[String] $image = 'centos-7-x86_64'
    ) {
      # provision machines, set roles
      ['server', 'appserver', 'dmgr', 'ihs'].each |$role| {
        run_task("provision::${using}", 'localhost', action => 'provision', platform => $image, vars => "role: ${role}")
      }
    }
    
    
    spec/spec\u helper\u acceptance\u local을 사용할 수 있습니다.rb는 테스트 모듈에 필요한 추가 설정에 사용됩니다.하나의 예puppetlabs-websphere_application_server
    실행 테스트
    우리는 통합 환경에서 실행될 테스트를 식별하기 위해 rspec 표시와 라크 작업을 사용합니다.디테일을 살펴봅시다.
  • Rspec 레이블은 어떻게 검수 테스트와 통합 테스트를 구분합니까?rspec 표시를 사용하면 테스트를 표시할 수 있습니다. 예를 들어 테스트가 통합으로 표시됩니다.다른 모든 것은 변하지 않을 수 있다.
  • 태그 테스트 예
    describe 'Install the websphere dmgr', :integration do
      before(:all) do
        @agent = WebSphereHelper.dmgr_host
        WebSphereInstance.install(@agent)
        WebSphereDmgr.install(@agent)
      end
    
      it 'is installed' do
        expect(WebSphereHelper.remote_file_exists(@agent, WebSphereConstants.dmgr_status))
        expect(WebSphereHelper.remote_file_exists(@agent, WebSphereConstants.ws_admin))
      end
    end
    
    
  • 통합 테스트 라크 퀘스트에 우호적인 라크 퀘스트를 추가합니다.모듈의 Rakefile에 추가됩니다.
  • 라크 작업 추가 예
    require 'rspec/core/rake_task'
    namespace :websphere_application_server do
      RSpec::Core::RakeTask.new(:integration) do |t|
        t.pattern = 'spec/acceptance/ **{,/*/** }/*_spec.rb'
        t.rspec_opts = "--tag integration"
      end
    end
    
    

  • Helper 함수는 레이블이 있는 컨테이너/가상 머신을 대상으로 하고 특정 컨테이너/가상 머신을 대상으로 테스트할 수 있습니다. 많은 Helper 방법이 필요합니다.이 용기/vm에서 테스트를 실행하기 때문에 서버spec/litmus에 필요합니다.다음은 하나의 vm/용기를 가져오거나 여러 개의 vm/목표를 검색하기 위한 필터의 예나 도움말입니다.
    puppetlabs-websphere_application_server
    puppetlabs-kubernetes
    대상 노드 식별 예
          context 'application deployment' do
            before(:all) { change_target_host('controller') }
            after(:all) { reset_target_host }
            it 'can deploy an application into a namespace and expose it' do
              run_shell('KUBECONFIG=/etc/kubernetes/admin.conf kubectl create -f /tmp/nginx.yml') do |r|
                expect(r.stdout).to match(/my-nginx created\nservice\/my-nginx created\n/)
              end
            end
    
    

  • 다음 명령을 테스트하면 "통합"으로 표시된 테스트만 실행됩니다.bundle exec rake websphere_application_server:integration찢어지다
    우리는 기존의 공급 임무를 사용하여 모든 공급된 기계를 철거한다.bundle exec rake litmus:tear_down

    저희가 다중 노드 테스트를 사용할 수 있는 다양한 장면을 보여드릴게요.


    여러 명의 괴뢰 스파이
    설정 중, 우리는 많은 puppet 에이전트를 설치하고 테스트를 실행합니다.
    명령하다
    bundle install --path .bundle/gems/ --jobs 4
    bundle exec rake spec_prep
    bundle exec bolt --modulepath spec/fixtures/modules plan run ntp::provision_gcp
    bundle exec rake litmus:install_agent
    bundle exec rake litmus:install_module
    bundle exec rake ntp::integration
    bundle exec rake 'litmus:tear_down'
    
    
    예제puppetlabs-ntp
    허수아비 서버와 에이전트
    설정 중, 우리는puppet 서버와puppet 에이전트가 있고, 하나의 모듈을 설치하여 테스트를 실행합니다.우리는 볼트 계획을 사용하여 여러 개의 노드를 설정할 수 있으며, 각 노드마다 캐릭터가 표시되어 있다.공급 모듈에 새 task 가 오픈소스 puppet 서버를 설치합니다.
    명령하다
    bundle install --path .bundle/gems/ --jobs 4
    bundle exec rake spec_prep
    bundle exec bolt --modulepath spec/fixtures/modules plan run kubernetes::provision_cluster
    bundle exec bolt --modulepath spec/fixtures/modules -i ./spec/fixtures/litmus_inventory.yaml plan run kubernetes::puppetserver_setup
    bundle exec rake litmus:install_agent
    bundle exec rake litmus:install_module
    bundle exec rake kubernetes::integration
    bundle exec rake 'litmus:tear_down'
    
    
    예제puppetlabs-kubernetes

    PE 및 대리점
    설정 중, 우리는PE 서버와puppet 에이전트가 있고, 모듈을 설치하여 테스트를 실행합니다.우리는 볼트 계획을 사용하여 여러 개의 노드를 설정할 수 있으며, 각 노드마다 캐릭터가 표시되어 있다.puppet-deploy -PE 모듈에 PE 설치 작업이 있습니다.provision_master/agents
    명령하다
    bundle install --path .bundle/gems/ --jobs 4
    bundle exec rake spec_prep
    bundle exec bolt --modulepath spec/fixtures/modules plan run ntp::provision_gcp
    bundle exec bolt --modulepath spec/fixtures/modules -i ./spec/fixtures/litmus_inventory.yaml plan run ntp::pe_server
    bundle exec bolt --modulepath spec/fixtures/modules -i ./spec/fixtures/litmus_inventory.yaml plan run ntp::pe_agent
    bundle exec rake litmus:install_module
    bundle exec rake ntp::integration
    bundle exec rake 'litmus:tear_down'
    
    
    예제puppetlabs-ntp
    PE 서버 설치 계획
    plan ntp::pe_server(
      Optional[String] $version = '2019.8.5',
      Optional[Hash] $pe_settings = {password => 'puppetlabs'}
    ) {
      # identify pe server node
      $puppet_server = get_targets('*').filter |$n| { $n.vars['role'] == 'ntpserver' }
    
      # install pe server
      run_plan(
        'deploy_pe::provision_master',
        $puppet_server,
        'version' => $version,
        'pe_settings' => $pe_settings
      )
    }
    
    
    puppet 에이전트 설치 계획
    plan ntp::pe_agent() {
      # identify pe server and agent nodes
      $puppet_server = get_targets('*').filter |$n| { $n.vars['role'] == 'ntpserver' }
      $puppet_agent = get_targets('*').filter |$n| { $n.vars['role'] == 'ntpclient' }
    
      # install agent
      run_plan(
        'deploy_pe::provision_agent',
        $puppet_agent,
        'master' => $puppet_server,
      )
    }
    
    

    다중 노드 모듈 GitHub 운영 워크플로우 예

  • puppetlabs-websphere_application_server
  • puppetlabs-kubernetes
  • 고마워요


    TP 통합 테스트 분야에서 귀중한 일을 해 주셔서 감사합니다.감사Marty가 클라우드 CI에 PE를 설치하기 위해 한 일.

    좋은 웹페이지 즐겨찾기