Nhận thẻ đẩy hiện tại trong Github Action


13

Có cách nào để truy cập thẻ hiện tại đã được đẩy trong Hành động Github không? Trong CircleCI, bạn có thể truy cập giá trị này với $CIRCLE_TAGbiến.

Dòng công việc của tôi yaml đang được kích hoạt bởi một thẻ như vậy:

on:
  push:
    tags:
      - 'v*.*.*'

Và tôi muốn sử dụng số phiên bản đó làm đường dẫn tệp sau này trong quy trình làm việc.

Tôi đã bao gồm giải pháp cuối cùng của mình dựa trên câu trả lời được chọn là câu trả lời khác bên dưới: https://stackoverflow.com/a/58195087/756514

Câu trả lời:


22

Theo tôi biết không có biến thẻ. Tuy nhiên, nó có thể được trích xuất từ GITHUB_REFđó chứa ref đã kiểm tra, vdrefs/tags/v1.2.3

Hãy thử quy trình làm việc này. Nó tạo ra một biến môi trường mới với phiên bản trích xuất mà bạn có thể sử dụng trong các bước sau.

on:
  push:
    tags:
      - 'v*.*.*'
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Set env
        run: echo ::set-env name=RELEASE_VERSION::${GITHUB_REF:10}
      - name: Test
        run: |
          echo $RELEASE_VERSION
          echo ${{ env.RELEASE_VERSION }}

Ngoài ra, sử dụng set-output:

on:
  push:
    tags:
      - 'v*.*.*'
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Set output
        id: vars
        run: echo ::set-output name=tag::${GITHUB_REF:10}
      - name: Check output
        env:
          RELEASE_VERSION: ${{ steps.vars.outputs.tag }}
        run: |
          echo $RELEASE_VERSION
          echo ${{ steps.vars.outputs.tag }}

1
Thật hoàn hảo cảm ơn bạn, chỉ một câu hỏi: 10 đề cập đến là gì? chiều dài chuỗi?
Jon B

2
Điều đó có nghĩa là nó trích xuất chuỗi con bắt đầu từ vị trí thứ 10 (lập chỉ mục dựa trên 0). Vì vậy, nó bỏ qua refs/tags/và chỉ trả về phần cuối của chuỗi.
cựu chiến binh

Xin lỗi thêm một câu hỏi nữa, tôi muốn sử dụng biến $ RELEASE_VERSION đó để tạo đường dẫn đích cho một hành động S3 như vậy: DEST_PATH: "${{ secrets.AWS_S3_BUCKET }}/$RELEASE_VERSION"nhưng không thể hiểu đúng cú pháp, có ý tưởng nào không? (đây là trong ENV cho hành động của bên thứ 3 mà tôi sử dụng sau này trong yaml)
Jon B

1
Xem tài liệu ở đây để biết những biểu thức nào được cho phép. help.github.com/en/articles/ từ
peterevans

4
Lưu ý rằng thay vì sử dụng ${GITHUB_REF:10}để lọc tên của thẻ, tôi sẽ sử dụng mở rộng tham số ${GITHUB_REF#refs/*/}. Điều đó sẽ mở rộng /refs/tags/v1.0.1đến v1.0.1như mong đợi, nhưng cũng sẽ hoạt động với tên chi nhánh: /refs/heads/mastersẽ được mở rộng thành master, xem gnu.org/software/bash/manual/html_node/ trộm
Stefan Haberl

2

Đây là một quy trình công việc cho thấy GITHUB_REFbiến môi trường chứa refs/tags/v0.0.2:

https://github.com/rmunn/Testing/runs/242676390

Tôi chạy nó bằng cách tạo thẻ, sau đó làm git push origin v0.0.2.

Đây là một đoạn của quy trình công việc bạn thấy trong nhật ký đó:

steps:
- uses: actions/checkout@v1
- name: Dump GitHub context
  env:
    GITHUB_CONTEXT: ${{ toJson(github) }}
  run: echo "$GITHUB_CONTEXT"
  if: runner.os != 'Windows'
- name: Show GitHub ref
  run: echo "$GITHUB_REF"
  if: runner.os != 'Windows'
- name: Dump event JSON
  env:
    EVENT_JSON_FILENAME: ${{ github.event_path }}
  run: cat "$EVENT_JSON_FILENAME"
  if: runner.os != 'Windows'

Vì nhật ký đó cuối cùng sẽ bị xóa (Tôi không biết nhật ký Hành động Github được giữ lại trong bao lâu, nhưng chắc chắn không phải là mãi mãi), đây là một ảnh chụp màn hình để làm bằng chứng.

nhập mô tả hình ảnh ở đây


1

Vì vậy, nhờ tất cả sự giúp đỡ từ @peterevans, tôi đã xoay sở để đạt được kết quả mà tôi muốn đó là:

  • để gắn thẻ một cam kết
  • đẩy thẻ để kích hoạt hành động github
  • hành động github đặt thẻ git là một var env
  • chạy cài đặt và xây dựng
  • sử dụng chrislennon/action-aws-clihành động để cài đặt aws cli bằng cách sử dụng các bí mật cho khóa
  • chạy lệnh để đồng bộ hóa bản dựng với nhóm S3 mới bằng cách sử dụng thẻ env var làm tên thư mục

Đây là một ví dụ về những gì tôi đã chạy bằng hành động của Chris Lennon:

on:
  push:
    tags:
      - 'v*.*.*'
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Set env
        run: echo ::set-env name=RELEASE_VERSION::$(echo ${GITHUB_REF:10})
      - name: yarn install & build
        run: |
          yarn install
          yarn build
      - uses: chrislennon/action-aws-cli@v1.1
      - name: Publish to AWS S3
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
        run: aws s3 sync dist s3://$AWS_S3_BUCKET/$RELEASE_VERSION/ --acl public-read
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.