GitHub Actions 시작하기 - checkout과 context, secret

noopy·2022년 4월 6일
2

🔁 배포와 자동화

목록 보기
2/6
post-thumbnail

📝 개요

이전 게시글에선 Github-Actions의 아주 기초적인 흐름을 이해했다. 이번에는 checkout이 무엇인지 이해하고 shell 명령어에서 여러가지 context 정보를 가져오는 연습을 해본다. 추가적으로 Secret을 통해 환경 정보를 숨기고 어떻게 출력되는지 확인한다.

Context란?

Context는 Runner가 실행될 시점에서 Workflow에 접근가능한 여러가지 정보들을 모아놓은 것이다. 좀 복잡하지만 단순히 생각하면 Runner가 실행될 때 가져오고 싶은 정보들을 Context에서 가져올 수 있다고 생각하면 된다.

🎉 예제

Checkout

이전과 마찬가지로 레포지토리의 Actions 탭에 들어가 Set up a workflow yourself로 yml 파일을 생성하자.



name: checkout prac


on:

  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]


  workflow_dispatch:


jobs:

  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - name: Run a one-line script
        run: echo Hello, world!

      - name: Run a multi-line script
        run: |
          echo Add other actions to build,
          echo test, and deploy your project.

steps의 uses에선 해당 Step에서 사용할 Action을 정의한다.
{owner}/{repo}@{ref|version}와 같은 구조이며 actions의 checkout 이라는 레포지토리의 Action을 사용하겠다는 의미이다.
해당 레포지토리는 깃허브 actions 레포에서 확인할 수 있다.

기본적으로 Runner는 비어있는 깡통인데 uses에서 작성된 레포를 클론 후 체크아웃해서 이후부터 작성된 명령어들을 실행할 수 있게 해준다.
checkout이 무엇인지만 이해하고자 임시로 만들고 파일을 따로 생성하지는 않겠다.

Context

Contexts are a way to access information about workflow runs, runner environments, jobs, and steps. Each context is an object that contains properties, which can be strings or other objects.

Contexts를 통해 다양한 정보들에 접근할 수 있으며, 각 context는 객체 형태로써 프로퍼티를 포함한다.
예시를 들면

  • github.actor: 작성자
  • github.repository: 레포지토리
  • github.sha: 커밋 id

그럼 커밋 id를 쉘에 출력해보는 연습을 해보자.

workflow에서 Context에 접근하기 위해선 ${{}} 보간을 사용한다.

Context Prac이라는 workflow를 만들고, 환경 변수를 설정했다.

name: Context prac


on: [push]

jobs:

  build:
    runs-on: ubuntu-latest

    steps:

      - name: Context Prac
        env: 
          COMMIT_ID: ${{ github.sha }} # 환경 변수 설정
        run: echo "Commit id => $COMMIT_ID"

쉘에 commit id가 잘 출력되었다.

Secret

중요한 정보는 어떻게 저장하고 활용해야 할까?
내 레포지토리의 Secrets 탭에서 환경 정보를 저장하고 활용할 수 있다.

저장된 secret이 없기 때문에 PASSWORD 정보를 저장해보자.

그러면 아래와 같이 보안적으로 중요할 것 같은 아이콘과 함께 PASSWORD 정보가 저장된다.

간단하게 password를 콘솔창에 보여주는 workflow를 생성해보자.

name: Echo password

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Echo password
        env:
          MY_PASSWORD: ${{ secrets.PASSWORD }}
        run: echo $MY_PASSWORD is my password.

Secrets에 저장된 정보들은 secrets 객체에서 가져올 수 있다.

또한 출력된 정보를 확인할 수 없어 보안적으로 안전하다.

profile
💪🏻 아는 걸 설명할 줄 아는 개발자 되기

0개의 댓글