GitHub Actions의 자체 제작 Actions 배포 자동화를 간소화해봤습니다.

14851 단어 GitHubTypeScript
GitHub Actions도 드디어 정식 출시
그래서 기념으로 기사를 쓰고 싶습니다.
전에 [GitHub Actions] 자체 제작 Actions 자동 게시 썼는데 그 이후로 더욱 완결적으로 자동화 발행할 수 있게 되었습니다. 제가 소개해 드릴게요.
이전 기사에서 매우 번거로운 일을 했기 때문에 앞으로 자동화를 발행하고 싶은 사람은 본 보도를 참고하십시오.

사용 작업


버전 자동화를 위한 작업은 actions/create-release 입니다.

사용 방법


README.md에 사용례가 쓰여 있습니다.
jobs:
  build:
    name: Create Release
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@master
      - name: Create Release
        id: create_release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: ${{ github.ref }}
          release_name: Release ${{ github.ref }}
          draft: false
          prerelease: false
with 아래 파라미터의 이름으로 추측할 수 있을 것 같아서 특별히 설명하지는 않겠지만 action.yml 사용할 수 있는 파라미터와 설명이 적혀 있기 때문에 읽어보시기 바랍니다.
만약 정상적으로 발표할 수 있다면 html_URL을 출력할 수 있기 때문에 트위터 API 등을 통해 SNS에 자동으로 게시할 수 있다.html_url의 획득 방법은 상기 예에서 steps.create_release.outputs.html_url.

소스 코드 소개


액션/create-release를 깊이 파보세요.
이 작업은 내부에서 사용됩니다@actions/github.이 밖에 @actions/github 사용@octokit/rest@octokit/graphql.create-release는 GraphQL 클라이언트를 사용하지 않고 @octokit/rest octokit.repos.createRelease 에서 발표합니다.
actions/create-relase에서 실제 발표된 핵심 코드는 여기.먼저 ↓에 쓰세요.
 const github = new GitHub(process.env.GITHUB_TOKEN);

 // Get owner and repo from context of payload that triggered the action
 const { owner, repo } = context.repo;

 // Get the inputs from the workflow file: https://github.com/actions/toolkit/tree/master/packages/core#inputsoutputs
 const tagName = core.getInput('tag_name', { required: true });

 // This removes the 'refs/tags' portion of the string, i.e. from 'refs/tags/v1.10.15' to 'v1.10.15'
 const tag = tagName.replace('refs/tags/', '');
 const releaseName = core.getInput('release_name', { required: true }).replace('refs/tags/', '');
 const draft = core.getInput('draft', { required: false }) === 'true';
 const prerelease = core.getInput('prerelease', { required: false }) === 'true';

 // Create a release
 // API Documentation: https://developer.github.com/v3/repos/releases/#create-a-release
 // Octokit Documentation: https://octokit.github.io/rest.js/#octokit-routes-repos-create-release
 const createReleaseResponse = await github.repos.createRelease({
    owner,
    repo,
    tag_name: tag,
    name: releaseName,
    draft,
    prerelease
 });
@octokit/rest는 @actions/github로 포장된 github.repos.createRelease이지만 octokit.repos.createRelease과는 차이가 많지 않기 때문이다.참고로 octokit.repos.createReleasebody 의 매개 변수는 발행 설명을 기술할 수 있지만 github.repos.createRelease 에서 이 매개 변수를 실현하지 못했다.2019/11/14 때 견인력 상승했어요. 머지않아 합병될 것 같아요.빨리 됐으면 좋겠어요.
replace는 레이블과 발행 이름을 같게 하기 때문에release_${{ github.ref }}name에게 건네주면 됩니다.

게시 자동화


그럼 본론의 자동 발표의 단순화입니다.우선 워크플로우의 YAML을 게재합니다.
name: Prepare for release

on:
  push:
    tags:
      - 'v*'

jobs:
  release:
    name: Build production
    runs-on: ubuntu-18.04
    steps:
      - uses: actions/checkout@v1

      - uses: actions/setup-node@v1
        with:
          node-version: '10.x'

      - name: Create Release
        uses: actions/[email protected]
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: ${{ github.ref }}
          release_name: ${{ github.ref }}
          draft: 'false'
          prerelease: 'false'

      - name: Slack Notification
        uses: homoluctus/slatify@master
        if: always()
        with:
          type: ${{ job.status }}
          job_name: ':rocket: *Publish new release ${{ github.ref }}*'
          channel: '#develop'
          url: ${{ secrets.SLACK_WEBHOOK }}

블록별 설명


촉발

on:
  push:
    tags:
      - 'v*'
접두사 v 의 태그를 밀어넣으면 워크플로가 시작됩니다.*는 일반 정규 표현식에서 사용하는 의미와 같다.그래서 발표하고 싶을 때 v1.0 이런 느낌으로 라벨을 붙여서 밀면 돼요.

발표하다

      - name: Create Release
        uses: actions/[email protected]
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: ${{ github.ref }}
          release_name: ${{ github.ref }}
          draft: 'false'
          prerelease: 'false'
tag_namerelease_name 지정${{ github.ref }}.${{ github.ref }}의 실체는 ref/tags/v1.0와 같다.actions/create-release의 원본 코드에 대한 설명에서 말한 Replace의 것ref/tags이 제거되었기 때문에tag_name 및 release_name 은 v1.0 입니다.다른 문장으로도 쓸 수 있다.그곳은 자유롭다.

끝내다


처음에도 말했듯이 GitHub Actions도 드디어 정식으로 출시되었다
다른 CI/CD 못지않게 GitHub Actions가 우수합니다.
나는 앞으로 지역사회가 발전하면 개발자와 운용자들이 더욱 수월해졌으면 좋겠다고 생각한다.

좋은 웹페이지 즐겨찾기