รับแท็กผลักปัจจุบันใน 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

ตกลงอีกหนึ่งคำถามขออภัยฉันต้องการใช้ตัวแปร $ RELEASE_VERSION นั้นเพื่อสร้างเส้นทางปลายทางสำหรับการดำเนินการ S3 เช่นนั้นDEST_PATH: "${{ secrets.AWS_S3_BUCKET }}/$RELEASE_VERSION"แต่ไม่ได้รับไวยากรณ์ที่ถูกต้องแนวคิดใด ๆ (นี่คือใน ENV สำหรับการกระทำของบุคคลที่สามที่ฉันใช้ในภายหลังใน yaml โดยวิธี)
Jon B

1
ดูเอกสารที่นี่สำหรับสิ่งที่ได้รับอนุญาตการแสดงออก help.github.com/th/articles/…
peterevans

4
โปรดทราบว่าแทนการใช้การกรองชื่อของแท็กผมจะใช้การขยายตัวพารามิเตอร์${GITHUB_REF:10} ${GITHUB_REF#refs/*/}สิ่งนี้จะขยาย/refs/tags/v1.0.1ไปถึงv1.0.1อย่างที่คาดไว้ แต่จะทำงานกับชื่อสาขา: /refs/heads/masterจะขยายไปยังmasterดูgnu.org/software/bash/manual/html_node/ …
Stefan

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-cliการดำเนินการเพื่อติดตั้ง aws cli โดยใช้ความลับสำหรับคีย์
  • รันคำสั่งเพื่อซิงค์บิลด์กับที่ฝากข้อมูล S3 ใหม่โดยใช้ tag env var เป็นชื่อ dir

นี่คือตัวอย่างของสิ่งที่ฉันวิ่งโดยใช้การกระทำของ 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.