티스토리 뷰

새로운 service를 만들때마다 workflow yml 파일을 복사 붙여넣기하여 사용하고 있었다. reusing workflows를 사용하여 workflow를 재사용할 수 있도록 구성했다. workflow를 구성하면서 손이가는 작업이 github actions의 secret를 설정하는 작업이었다. 이부분 또한 organization secret을 사용하여 정리해 보았다.
✏️ Organization secrets
Gihub Organization을 사용하고 있다면 Organization 안에서 사용할 수 있는 github actions secrets을 설정할 수 있다. Organization secrets을 사용하지 않았을 때는 repository별로 secrets를 설정해야했다. repository별로 다른 secrects를 설정해야한다면 문제 없겠지만 모든 repository에서 같은 secrets을 사용하는 경우가 많았다. repository를 새로 생성해야하면 secrets를 매번 새롭게 설정해야했다.
Organization의 admin만이 organization secrets을 설정할 수 있다. admin으로 접속하여 organization page에서 settings -> actions -> secrets으로 이동하여 organization secrets을 설정할 수 있다.

organization secrets은 repository별로 설정이 가능하다. repository를 다양한 사용자가 생성하고 사용하고 있어서 특정 repository에만 secrets에 접근할 수 있는 권한을 부여했다.
organization secrets은 개별 repository에서 설정한 secrects과 동일한 방법으로 접근이 가능하다. ORG_ prefix를 설정하여 개별 repository secrets과 분리했다.
...
jobs:
deploy:
runs-on: ubuntu-latest
steps:
...
- name: deploy
run: |
yarn deploy
env:
npm_token: ${{ secrets.ORG_NPM_TOKEN }}
aws_access_key_id: ${{ secrets.ORG_ACTION_ACCESS_KEY_ID }}
aws_secret_access_key: ${{ secrets.ORG_ACTION_SECRET_ACCESS_KEY }}
secrets에 문제가 있거나 주기적으로 key를 변경해야하는 경우 한 번의 설정으로 여러 repository에 변경사항을 반영할 수 있다.
⭐️ Reusable workflows
reusing workflows의 yml은 아래와 같다.
name: node deploy reusable workflow
on:
workflow_call:
inputs:
project_name:
required: true
type: string
stage:
default: dev
required: false
type: string
secrets:
npm_token:
required: true
aws_access_key_id:
required: true
aws_secret_access_key:
required: true
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version-file: ".nvmrc"
cache: "yarn"
registry-url: "https://registry.npmjs.org"
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Cache node modules
uses: actions/cache@v3
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ env.CACHE_NAME }}-${{ env.STAGE }}-${{ hashFiles('**/yarn.lock') }}
restore-keys: ${{ runner.os }}-yarn-${{ env.CACHE_NAME }}-${{ env.STAGE }}-
env:
CACHE_NAME: ${{ inputs.project_name }}
STAGE: ${{ inputs.stage }}
- name: yarn install local dependency
run: yarn install
env:
NODE_AUTH_TOKEN: ${{ secrets.npm_token }}
- name: deploy
run: |
yarn deploy
env:
NODE_ENV: ${{ inputs.stage }}
DEPLOY_ALIAS: ${{ inputs.deploy_alias }}
AWS_ACCESS_KEY_ID: ${{ secrets.aws_access_key_id }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.aws_secret_access_key }}
reusing workflows로 값을 전달할 수 있다. 암호화가 필요하지 않은 inputs과 암호화가 필요한 secret이 존재한다. jobs는 기존의 workflow를 사용하는 방법과 동일하게 사용할 수 있다.
📌 reusing workflows 제한사항
- reusing workflows는 다른 reusing workflows를 호출할 수 없다.
- reusing workflows을 private repository에 저장한다면 같은 repository안에서만 reusing workflows를 호출하여 사용하야한다.
✏️ Reusing workflows 호출하기
reusing workflows 설정 시 private repository 사용한다면 주의해야하는 제한은 같은 repository에 Reusable workflows를 저장하여 사용해야한다는 것이다.
Reusable workflows stored within a private repository can only be used by workflows within the same repository.
여러 repository에서 사용할 수 있도록 구성해야 했기에 private repository로 설정할 수 없었고 public repository에 reusing workflows를 저장해야 했다.
private repository에서 reusing workflows
reusing workflows를 private repository에 저장하는 경우 같은 repository안에 있는 reusing workflows만 호출이 가능하다. 같은 repository에 있는 경우 아래와 같이 상대경로를 통해 reusing workflows를 호출할 수 있다.
name: test
on:
pull_request:
branches:
- develop
jobs:
node-deploy:
uses: ./.github/workflows/{filename}@master
with:
project_name: test-project
stage: test
secrets:
npm_token: ${{ secrets.ORG_NPM_TOKEN }}
aws_access_key_id: ${{ secrets.ORG_ACTION_ACCESS_KEY_ID }}
aws_secret_access_key: ${{ secrets.ORG_ACTION_SECRET_ACCESS_KEY }}
reusing workflows를 private repository에 생성하면 같은 respository에서만 호출하여 사용할 수 있어서 여러 repository를 관리해야한다면 public으로 변경하여 아래와 같은 방식의 설정이 필요한다.
public repository에서 reusing workflows
다른 repository에 저장되어 있는 reusing workflows를 호출하고자 한다면 {owner}/{repo}/.github/workflows/{filename}@{ref} 방식으로 호출할 수 있다.
name: test
on:
pull_request:
branches:
- develop
jobs:
node-deploy:
uses: {owner}/{repo}/.github/workflows/{filename}@{ref}
with:
project_name: test-project
stage: test
secrets:
npm_token: ${{ secrets.ORG_NPM_TOKEN }}
aws_access_key_id: ${{ secrets.ORG_ACTION_ACCESS_KEY_ID }}
aws_secret_access_key: ${{ secrets.ORG_ACTION_SECRET_ACCESS_KEY }}
'develop' 카테고리의 다른 글
Elasticsearch 비용 절약하기 (0) | 2024.09.19 |
---|---|
lambda@edge를 사용한 요청 header 처리(user-agent, accept-language) (0) | 2022.01.05 |
python 절대경로 / 상대경로 (0) | 2022.01.04 |
DAS / NAS / SAN (0) | 2021.10.29 |
3 계층 architecture (0) | 2021.10.29 |
- Total
- Today
- Yesterday
- Neptune
- JavaScript
- shorten
- Cloudfront
- commit message
- AWS community day seoul
- typescript
- lambda@edge
- Elasticsearch
- pagination
- inversify
- Prisma
- slowquery
- Cognito
- NLP
- Airflow
- aws
- conventional commit
- Github Actions
- Terraform
- Develop
- Clickjacking
- mognodb
- Python
- mongoDB
- graphql
- Lifecycle
- nltk
- sementic version
- nginx
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |