Github Actions에서 현재 푸시 태그 가져 오기


13

Github Action에서 푸시 된 현재 태그에 액세스하는 방법이 있습니까? CircleCI에서는 $CIRCLE_TAG변수를 사용하여이 값에 액세스 할 수 있습니다 .

내 워크 플로 yaml은 다음과 같은 태그로 트리거됩니다.

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

그리고 나중에 워크 플로에서 해당 버전 번호를 파일 경로로 사용하고 싶습니다.

선택한 답변을 기반으로 내 최종 솔루션을 아래의 다른 답변으로 포함했습니다. https://stackoverflow.com/a/58195087/756514

답변:


22

내가 아는 한 태그 변수가 없습니다. 그러나 GITHUB_REF체크 아웃 된 참조를 포함하는 위치 에서 추출 할 수 있습니다.refs/tags/v1.2.3

이 워크 플로우를 시도하십시오. 이후 단계에서 사용할 수있는 추출 된 버전으로 새 환경 변수를 작성합니다.

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 }}

또는 다음을 사용하십시오 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
: 10이 무엇을 말하는지 한 가지 질문만으로도 완벽하게 감사합니다. 끈 길이?
Jon B

2
그것은 10 번째 위치에서 시작하는 하위 문자열을 추출한다는 것을 의미합니다 (0 기반 색인화). 따라서 refs/tags/문자열의 마지막 부분을 건너 뛰고 반환합니다.
peterevans 19

질문 하나 더 죄송합니다. $ RELEASE_VERSION 변수를 사용하여 S3 작업의 대상 경로를 이렇게 만들고 싶습니다. DEST_PATH: "${{ secrets.AWS_S3_BUCKET }}/$RELEASE_VERSION"하지만 구문을 올바르게 얻을 수는 없습니다. (이것은 나중에 yaml에서 나중에 사용하는 타사 작업의 ENV에 있습니다)
Jon B

1
허용되는 식에 대해서는 여기의 설명서를 참조하십시오. help.github.com/ko/articles/…
peterevans

4
${GITHUB_REF:10}태그 이름을 필터링하는 데 사용하는 대신 매개 변수 expansion을 사용합니다 ${GITHUB_REF#refs/*/}. 즉 확장 것 /refs/tags/v1.0.1으로 v1.0.1예상대로, 또한 지점 이름을 가진 작업은 다음과 같습니다 /refs/heads/master확대 될 것이다 master, 참조 gnu.org/software/bash/manual/html_node/...
스테판 Haberl

2

다음은 GITHUB_REF환경 변수에 refs/tags/v0.0.2다음이 포함되어 있음을 보여주는 워크 플로 실행입니다 .

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

태그를 만든 다음을 수행하여이를 실행했습니다 git push origin v0.0.2.

다음은 해당 로그에 표시되는 워크 플로의 일부입니다.

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'

해당 로그가 결국 삭제되므로 (Github Actions 로그가 얼마나 오래 유지되는지는 모르겠지만, 확실하지는 않습니다), 여기 증거 용 스크린 샷이 있습니다.

여기에 이미지 설명을 입력하십시오


1

@peterevans의 모든 도움 덕분에 원하는 결과를 얻을 수있었습니다.

  • 커밋에 태그를 지정
  • 태그를 밀어 github 동작을 트리거하십시오
  • github 액션은 git 태그를 env var로 설정합니다
  • 설치 및 빌드 실행
  • 사용 chrislennon/action-aws-cliAWS 키에 대한 비밀을 사용하여 CLI 설치하기위한 조치를
  • env var 태그를 dir 이름으로 사용하여 빌드를 새 S3 버킷에 동기화하는 명령을 실행하십시오.

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.