2017-03-06 17 views
5

Nó không rõ ràng đối với tôi từ the documentation nếu nó thậm chí có thể chuyển đầu ra của công việc cho công việc khác (không phải từ nhiệm vụ đến công việc, mà từ công việc đến công việc).Phòng chờ: cách chuyển sản lượng của công việc sang một công việc khác

Tôi không biết nếu khái niệm tôi đang làm đúng, có lẽ nó nên được mô hình khác trong Concourse, nhưng những gì tôi đang cố gắng đạt được là có đường ống cho dự án Java được chia thành nhiều công việc chi tiết, được thực hiện song song và được kích hoạt độc lập nếu tôi cần chạy lại một số công việc.

Làm thế nào tôi nhìn thấy các đường ống dẫn:

  1. công việc đầu tiên:
    • kéo mã từ github repo
    • xây dựng các dự án với maven
    • triển khai các đồ tạo tác vào kho maven (mvn deploy)
    • cập nhật SNAPSHOT phiên bản của tiểu hệ thống dự án Maven
    • bản đồ tạo tác (file jar) vào thư mục đầu ra (output của task) công việc thứ hai
  2. :
    • cuốc lên jar 's từ output
    • xây dựng container Docker cho tất cả chúng (song song)
  3. Đường ống đi vào số

Tôi không thể chuyển số output từ công việc 1 sang công việc 2. Ngoài ra, tôi tò mò nếu bất kỳ thay đổi nào tôi giới thiệu với tài nguyên git repo gốc sẽ có mặt trong công việc tiếp theo (từ công việc 1 đến công việc 2).

Vì vậy, câu hỏi là:

  1. một cách thích hợp để vượt qua xây dựng nhà nước từ công việc để công việc là gì (Tôi biết, công việc có thể được sắp xếp trên các nút khác nhau, và chắc chắn trong các thùng chứa khác nhau)?
  2. Có cần lưu trữ trạng thái trong tài nguyên (ví dụ, S3/git) không?
  3. Trạng thái phòng chờ theo thiết kế (trong ngữ cảnh này)?
  4. Nơi tốt nhất để biết thêm thông tin? Tôi đã thử hướng dẫn sử dụng, nó không phải là chi tiết.

Những gì tôi đã tìm thấy cho đến nay:

  1. output s không truyền từ công việc để công việc
  2. Bất kỳ thay đổi đối với tài nguyên (put đến repo github) được lấy trong các công việc tiếp theo , nhưng những thay đổi trong bản sao làm việc không

dụ Minimal (nó không thành công nếu dòng nhận xét là không chú thích với lỗi: missing inputs: gist-upd, gist-out):

--- 
resources: 
    - name: gist 
    type: git 
    source: 
     uri: "[email protected]:snippets/foo/bar.git" 
     branch: master 
     private_key: {{private_git_key}} 

jobs: 
    - name: update 
    plan: 
     - get: gist 
     trigger: true 

     - task: update-gist 
     config: 
      platform: linux 
      image_resource: 
      type: docker-image 
      source: {repository: concourse/bosh-cli} 

      inputs: 
      - name: gist 

      outputs: 
      - name: gist-upd 
      - name: gist-out 

      run: 
      path: sh 
      args: 
       - -exc 
       - | 
       git config --global user.email "[email protected]" 
       git config --global user.name "Concourse" 
       git clone gist gist-upd 
       cd gist-upd 
       echo `date` > test 
       git commit -am "upd" 
       cd ../gist 
       echo "foo" > test 
       cd ../gist-out 
       echo "out" > test 

     - put: gist 
     params: {repository: gist-upd} 

    - name: fetch-updated 
    plan: 
     - get: gist 
     passed: [update] 
     trigger: true 

     - task: check-gist 
     config: 
      platform: linux 
      image_resource: 
      type: docker-image 
      source: {repository: alpine} 

      inputs: 
      - name: gist 
      #- name: gist-upd 
      #- name: gist-out 

      run: 
      path: sh 
      args: 
       - -exc 
       - | 
       ls -l gist 
       cat gist/test 
       #ls -l gist-upd 
       #cat gist-upd/test 
       #ls -l gist-out 
       #cat gist-out/test 

Trả lời

8

Để trả lời từng câu hỏi của bạn.

  1. Tất cả trạng thái xây dựng cần phải được chuyển từ công việc sang công việc dưới dạng resource phải được lưu trữ trên một số loại cửa hàng bên ngoài.
  2. Nó là cần thiết để lưu trữ trên một số loại cửa hàng bên ngoài. Mỗi loại tài nguyên xử lý việc tải lên và tải xuống chính nó, vì vậy đối với trường hợp cụ thể của bạn, tôi sẽ kiểm tra điều này maven custom resource type, dường như làm những gì bạn muốn.
  3. Có, trạng thái phi trạng thái này là đặc điểm xác định đằng sau phòng chờ. Phần tử stateful duy nhất trong concourse là một tài nguyên, phải được phiên bản và lưu trữ nghiêm ngặt trên một kho lưu trữ dữ liệu ngoài. Khi bạn kết hợp việc chứa các nhiệm vụ với kho lưu trữ bên ngoài của các tài nguyên, bạn sẽ có được khả năng tái tạo được đảm bảo mà phòng chờ cung cấp. Mỗi phiên bản của một tài nguyên sẽ được sao lưu trên một số loại lưu trữ dữ liệu, và vì vậy ngay cả khi trung tâm dữ liệu mà ci của bạn chạy là hoàn toàn rơi xuống, bạn vẫn có thể có khả năng tái tạo nghiêm ngặt của mỗi bản dựng ci của bạn.
  4. Để biết thêm thông tin, tôi khuyên bạn nên thực hiện một hướng dẫn nào đó để làm bẩn tay và tự xây dựng một đường ống dẫn. Nhóm hòa nhạc đã thực hiện flight school và stark và wayne có thêm một chút advanced tutorial cũng có thể hữu ích. Để giúp hiểu tài nguyên cũng có một số resources tutorial, điều này có thể hữu ích cho bạn một cách cụ thể.

Ngoài ra, để có được báo lỗi cụ thể của bạn, lý do mà bạn đang nhìn thấy missing inputs là bởi vì phòng chờ sẽ tìm kiếm danh bạ (do tài nguyên gets) đặt tên cho mỗi đóng góp đó. Vì vậy, bạn sẽ cần phải get trường hợp tài nguyên có tên gist-updgist-out trước khi bắt đầu nhiệm vụ.

+1

Tuyệt vời, cảm ơn! –

+0

Không sao, tôi vừa sửa câu trả lời để thêm một số thông tin. –

+1

Tôi muốn lưu ý rằng trong khi trạng thái công việc phải làm việc yêu cầu tài nguyên được khai báo, thì không bắt buộc phải rõ ràng trong phòng chờ để sử dụng tài nguyên bên ngoài để chuyển dữ liệu giữa các bước của cùng một công việc. Các get/puts của một nhiệm vụ hoặc tài nguyên được tự động sao chép như các thư mục trên chúng. Một nhiệm vụ có thể khai báo một giá trị mới: tài nguyên cục bộ cho công việc và không được khai báo như một tài nguyên trong đường ống, và một nhiệm vụ khác trong cùng một công việc có thể có được: để khớp nó. –

Các vấn đề liên quan