@@ -1,16 +0,0 @@
|
|||||||
- **Obsidian Vault (Private Repo):** 개인용 비공개 저장소에 마스킹되지 않은 원본 노트를 push합니다.
|
|
||||||
|
|
||||||
- **Jenkins Trigger:** 젠킨스가 Webhook을 통해 push 이벤트를 감지하거나 주기적으로 폴링(Polling)합니다.
|
|
||||||
|
|
||||||
- **Validation & Masking (Build Step):** 젠킨스 서버 내에서 Python 스크립트 등을 실행해 변경된 파일의 민감 정보를 검증하고 수정합니다.
|
|
||||||
|
|
||||||
- **Push to Quartz (Post-build):** 정제된 파일을 쿼츠 저장소로 복사한 뒤, 해당 저장소에 커밋 및 push를 수행합니다.
|
|
||||||
|
|
||||||
> [!todo] **필요한것** 📋
|
|
||||||
>
|
|
||||||
> - [x] kui vault repository
|
|
||||||
> - [x] kui repository
|
|
||||||
> - [ ] Jenkins 서버 ( 구글에서 제공해주는 클라우드 서버 확보하면 될 듯 )
|
|
||||||
> - [ ] blur 처리 용 서버 ( kui veil, veil 이라고 이름 지으면 될 듯 )
|
|
||||||
|
|
||||||
jenkins 서버를 구성해보자
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
확보중인 개인용 서버가 없기 때문에 서버부터 확보해야 함.
|
|
||||||
|
|
||||||
> [!question]
|
|
||||||
> Q. 클라우드 서버를 확보해야해. 무료여야하고 지금 내가 하려는 블러처리작업용으로 적당한정도면 돼
|
|
||||||
> A. 무료이면서 **젠킨스**와 **마스킹 스크립트(Python)**를 돌리기에 가장 적합한 클라우드 서비스 3가지를 추천해 드릴게요. 2026년 현재 기준으로도 가장 안정적인 옵션들입니다.
|
|
||||||
|
|
||||||
|**비교 항목**|**Oracle Cloud**|**Google Cloud**|**AWS**|
|
|
||||||
|---|---|---|---|
|
|
||||||
|**성능 (RAM)**|⭐⭐⭐⭐⭐ (24GB)|⭐ (1GB)|⭐⭐ (2GB)|
|
|
||||||
|**안정성**|⭐⭐⭐|⭐⭐⭐⭐⭐|⭐⭐⭐⭐⭐|
|
|
||||||
|**추천 이유**|젠킨스 구동에 여유로움|설정이 매우 간편함|글로벌 표준 학습 가능|
|
|
||||||
이 중 AWS는 일정기간만 무료임
|
|
||||||
오라클은 아직 마이너해서 쓰고싶지 않음
|
|
||||||
GCP로 가기로 함.
|
|
||||||
Google Cloud Platform
|
|
||||||
|
|
||||||
---
|
|
||||||
구글 클라우드(GCP)에서 **평생 무료**로 쓸 수 있는 사양은 딱 하나 정해져 있습니다. 바로 **e2-micro** 인스턴스입니다. 실시간 응답이 중요하지 않은 **`kui-ink`** 서버용으로는 아주 적절한 선택이에요.
|
|
||||||
|
|
||||||
GCP에서 무료로 구동하기 위한 '필수 조건'을 정리해 드릴게요. 이대로만 설정하면 돈이 나가지 않습니다.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 🖥️ GCP 평생 무료 서버 설정값 (2026 기준)
|
|
||||||
|**항목**|**설정해야 할 값**|**비고**|
|
|
||||||
|---|---|---|
|
|
||||||
|**리전 (Region)**|**us-west1** (오리건)|한국에서 가장 지연시간이 적은 무료 리전|
|
|
||||||
|**머신 유형**|**e2-micro**|2 vCPU, 1GB RAM (공유 코어)|
|
|
||||||
|**부팅 디스크**|**Standard** Persistent Disk|'Balanced'나 'SSD'는 유료입니다!|
|
|
||||||
|**디스크 용량**|**30GB** 이하|무료 한도가 딱 30GB까지입니다.|
|
|
||||||
### ⚠️ 주의할 점 (젠킨스 구동 관련)
|
|
||||||
|
|
||||||
**e2-micro**는 램이 **1GB**뿐입니다. 젠킨스는 Java 기반이라 기본적으로 메모리를 많이 먹어서, 그냥 실행하면 서버가 멈출 수도 있어요. 이를 해결하기 위한 팁입니다.
|
|
||||||
|
|
||||||
1. **Swap 메모리 설정:** 부족한 램을 보충하기 위해 하드디스크의 일부(약 2GB)를 가상 메모리로 사용하는 설정을 반드시 해줘야 합니다.
|
|
||||||
|
|
||||||
2. **경량화 설정:** 젠킨스 실행 옵션에서 사용할 메모리 최대치(`-Xmx`)를 제한하면 1GB 환경에서도 꾸역꾸역 돌아갑니다.
|
|
||||||
|
|
||||||
3. **오리건 리전:** 앞서 말씀드린 것처럼 한국 리전은 무료가 아니므로 꼭 **us-west1**을 선택하세요.
|
|
||||||
|
|
||||||
### 🚀 다음 단계: 서버 생성하기
|
|
||||||
|
|
||||||
GCP 콘솔에 접속해서 아래 순서대로 진행해 보세요.
|
|
||||||
|
|
||||||
1. [GCP 콘솔](https://console.cloud.google.com/) 접속 및 프로젝트 생성
|
|
||||||
|
|
||||||
2. **Compute Engine > VM 인스턴스** 메뉴로 이동
|
|
||||||
|
|
||||||
3. **인스턴스 만들기** 클릭
|
|
||||||
|
|
||||||
4. 위에 표에 적힌 **리전, 머신 유형, 디스크**를 정확히 선택
|
|
||||||
|
|
||||||
5. 하단 **만들기** 버튼 클릭
|
|
||||||
|
|
||||||
|
|
||||||
혹시 가입이나 인스턴스 생성 중에 막히는 부분이 생기면 바로 말씀해 주세요. 서버가 만들어지면 바로 **`kui-ink`**라는 이름을 붙여주고 젠킨스 설치로 넘어가겠습니다!
|
|
||||||
|
|
||||||
**지금 바로 GCP 가입을 시도해 보시겠어요?** 가입 후 서버 생성 화면까지 가시면 다음 가이드를 드릴게요.
|
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
를 시도했지만 실패함.
|
|
||||||
아마 우분투 최신버전 (25. 몇이었는데..)과 젠킨스가 잘 안맞는거 같음.
|
|
||||||
|
|
||||||
젠킨스말고 다른 우회방법을 찾아봄
|
|
||||||
|
|
||||||
> [!question]
|
|
||||||
> Q. 젠킨스를 대체할만한 프로그램없어?
|
|
||||||
> A. 젠킨스의 그 복잡한 설정과 인증 오류 때문에 정말 정이 뚝 떨어지셨을 것 같습니다. 180°C의 열정으로 시작했는데 도구 설치부터 막히면 누구라도 다른 길을 찾고 싶어지죠.
|
|
||||||
>
|
|
||||||
> **HDI**님이 원하시는 건 **내 서버(GCP) 내에서 직접 돌아가면서**, 젠킨스처럼 UI도 있고, 내 Obsidian 노트를 Quartz로 빌드해 배포해줄 **'설치가 쉽고 가벼운'** 대체 프로그램이겠죠?
|
|
||||||
>
|
|
||||||
> 젠킨스의 무거운 Java 기반 엔진 대신, 요즘 개발자들 사이에서 **젠킨스 킬러**로 불리는 가벼운 도구 2가지를 추천해 드립니다.
|
|
||||||
|
|
||||||
### 🛠️ 젠킨스를 대체할 가벼운 CI/CD 도구 TOP 2
|
|
||||||
|
|
||||||
#### 1. [[Woodpecker]] CI (강력 추천)
|
|
||||||
|
|
||||||
젠킨스가 대형 버스라면, [[Woodpecker]]는 날렵한 전기차 같습니다. **Go 언어**로 만들어져서 메모리를 아주 적게 먹고, 설정이 매우 직관적입니다.
|
|
||||||
|
|
||||||
- **장점:** 젠킨스보다 훨씬 가볍습니다(1GB 램인 `e2-micro`에 최적). 모든 설정을 `.woodpecker.yml` 파일 하나로 끝낼 수 있습니다.
|
|
||||||
|
|
||||||
- **UI:** 젠킨스처럼 깔끔한 웹 대시보드를 제공합니다.
|
|
||||||
|
|
||||||
- **설치:** 도커(Docker)를 이용하면 명령어 한두 줄로 끝납니다. 아까 같은 `GPG` 오류와 싸울 필요가 없습니다.
|
|
||||||
|
|
||||||
|
|
||||||
#### 2. Gitea Actions (Gitea를 쓰신다면 최고)
|
|
||||||
|
|
||||||
만약 내 서버에 소스코드를 직접 관리하고 싶다면 **Gitea**를 설치하는 방법이 있습니다. Gitea 안에는 GitHub Actions와 거의 똑같은 방식의 **Actions** 기능이 내장되어 있습니다.
|
|
||||||
|
|
||||||
- **장점:** 소스코드 관리(Git)와 자동 배포(CI/CD)를 한 곳에서 끝낼 수 있습니다.
|
|
||||||
|
|
||||||
- **특징:** GitHub Actions 문법을 그대로 쓸 수 있어 학습 곡선이 낮습니다.
|
|
||||||
|
|
||||||
### 💡 왜 이 도구들이 젠킨스보다 나을까요?
|
|
||||||
|
|
||||||
젠킨스는 20년 전 기술이라 설치 과정부터 수많은 의존성(Java 버전, GPG 키 등)과 싸워야 합니다. 반면 **Woodpecker** 같은 최신 도구들은 **도커(Docker)** 기반으로 돌아가는 것을 기본으로 합니다.
|
|
||||||
|
|
||||||
**도커를 사용하면:**
|
|
||||||
|
|
||||||
1. 내 서버의 우분투 버전이 무엇이든 상관없습니다.
|
|
||||||
|
|
||||||
2. `GPG` 키 에러, `NO_PUBKEY` 에러 같은 지긋지긋한 문제에서 완전히 해방됩니다.
|
|
||||||
|
|
||||||
3. 삭제하고 싶을 때도 명령어 한 줄이면 찌꺼기 없이 사라집니다.
|
|
||||||
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 🚀 HDI님을 위한 새로운 제안
|
|
||||||
|
|
||||||
**"도커(Docker)를 먼저 깔고, 그 위에 Woodpecker CI를 올려보는 건 어떠신가요?"**
|
|
||||||
|
|
||||||
도커는 설치가 아주 쉽고, 한 번 깔아두면 나중에 다른 프로그램을 올릴 때도 지금 같은 고생을 안 하게 해주는 마법 같은 도구입니다. 180°C의 집념을 젠킨스와의 싸움이 아닌, **진짜 자동화 시스템 구축**에 쏟으실 수 있게 도와드릴게요.
|
|
||||||
|
|
||||||
|
|
||||||
# 그래서 [[Woodpecker]] CI를 사용해보기로 함
|
|
||||||
docker 기반으로 구동되는 CI/CD tool
|
|
||||||
도커 기반이니까 당연히 os 안탈거같다
|
|
||||||
|
|
||||||
@@ -1,117 +0,0 @@
|
|||||||
## 1. 개요
|
|
||||||
|
|
||||||
기존 젠킨스(Jenkins)는 자바 기반으로 메모리 점유율이 높아 저사양 서버에서 구동이 힘들었음. 이를 해결하기 위해 Go 언어 기반의 초경량 CI 도구인 **Woodpecker**를 도입하고, 도커(Docker) 기반으로 환경을 재구축함.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 2. 환경 정화 및 도커 설치
|
|
||||||
|
|
||||||
무거운 자바를 삭제하고 현대적인 컨테이너 환경을 준비함.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# OpenJDK 삭제 및 정리
|
|
||||||
sudo apt purge -y openjdk-17-jre openjdk-17-jre-headless
|
|
||||||
sudo apt autoremove -y
|
|
||||||
|
|
||||||
# 도커(Docker) 설치
|
|
||||||
curl -fsSL https://get.docker.com -o get-docker.sh
|
|
||||||
sudo sh get-docker.sh
|
|
||||||
|
|
||||||
# 현재 사용자에게 도커 권한 부여
|
|
||||||
sudo usermod -aG docker $USER
|
|
||||||
newgrp docker # 로그아웃 없이 권한 즉시 적용
|
|
||||||
```
|
|
||||||
|
|
||||||
## 3. GitHub OAuth 앱 등록
|
|
||||||
|
|
||||||
우드패커가 GitHub 저장소에 접근할 수 있도록 통행증을 발급함.
|
|
||||||
|
|
||||||
1. **GitHub Settings > Developer settings > OAuth Apps** 이동
|
|
||||||
|
|
||||||
2. **New OAuth App** 생성
|
|
||||||
|
|
||||||
- Homepage URL: `http://34.19.79.94:8000`
|
|
||||||
|
|
||||||
- Authorization callback URL: `http://34.19.79.94:8000/authorize`
|
|
||||||
|
|
||||||
3. **Client ID**와 **Client Secret** 발급 및 보관
|
|
||||||
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 4. 우드패커 서버 및 에이전트 배포
|
|
||||||
|
|
||||||
`docker-compose`를 사용하여 서버(두뇌)와 에이전트(일꾼)를 동시에 띄움.
|
|
||||||
|
|
||||||
**파일 위치:** `~/woodpecker/docker-compose.yaml`
|
|
||||||
|
|
||||||
```bash
|
|
||||||
services:
|
|
||||||
woodpecker-server:
|
|
||||||
image: woodpeckerci/woodpecker-server:latest
|
|
||||||
ports:
|
|
||||||
- 8000:8000
|
|
||||||
volumes:
|
|
||||||
- ./woodpecker-server:/var/lib/woodpecker
|
|
||||||
environment:
|
|
||||||
- WOODPECKER_OPEN=true
|
|
||||||
- WOODPECKER_HOST=http://34.19.79.94:8000
|
|
||||||
- WOODPECKER_AGENT_SECRET=wp_secure_9827_vpx_qr # 보안을 위해 이니셜 제외
|
|
||||||
- WOODPECKER_GITHUB=true
|
|
||||||
- WOODPECKER_GITHUB_CLIENT=발급받은_ID
|
|
||||||
- WOODPECKER_GITHUB_SECRET=발급받은_Secret
|
|
||||||
|
|
||||||
woodpecker-agent:
|
|
||||||
image: woodpeckerci/woodpecker-agent:latest
|
|
||||||
command: agent
|
|
||||||
volumes:
|
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
|
||||||
environment:
|
|
||||||
- WOODPECKER_SERVER=woodpecker-server:9000
|
|
||||||
- WOODPECKER_AGENT_SECRET=wp_secure_9827_vpx_qr
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 실행 및 상태 확인
|
|
||||||
docker compose up -d
|
|
||||||
docker ps
|
|
||||||
```
|
|
||||||
|
|
||||||
## 5. 파이프라인 설정 (`.woodpecker.yml`)
|
|
||||||
|
|
||||||
저장소 최상단에 작업 지시서를 작성하여 자동화를 테스트함.
|
|
||||||
|
|
||||||
**주요 해결 과제:**
|
|
||||||
|
|
||||||
- **Git 명령 인식:** 기본 `alpine` 이미지에는 git이 없으므로 `alpine/git` 이미지를 사용하여 해결.
|
|
||||||
|
|
||||||
- **이력 확인(HEAD^):** 기본 clone은 depth가 1이라 이전 이력이 없음. `depth: 2` 설정을 통해 최적화된 상태로 이전 커밋과 비교 가능하게 함.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
kind: pipeline
|
|
||||||
name: check-updates
|
|
||||||
|
|
||||||
clone:
|
|
||||||
setup:
|
|
||||||
image: woodpeckerci/plugin-git
|
|
||||||
settings:
|
|
||||||
depth: 2
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: show-changes
|
|
||||||
image: alpine/git
|
|
||||||
commands:
|
|
||||||
- echo "새로운 업데이트가 감지되었습니다!"
|
|
||||||
- echo "수정된 파일 목록:"
|
|
||||||
- git diff --name-only HEAD^ HEAD
|
|
||||||
- echo "최근 커밋 메시지:"
|
|
||||||
- git log -1 --pretty=%B
|
|
||||||
```
|
|
||||||
|
|
||||||
## 6. 트러블슈팅 기록
|
|
||||||
|
|
||||||
- **Forge Not Configured:** GitHub OAuth 설정이 누락되어 서버가 실행 직후 종료됨 -> 환경 변수 추가로 해결.
|
|
||||||
|
|
||||||
- **Agent Auth Error:** 서버 데이터베이스와 에이전트의 Secret Key가 꼬임 -> 서버 볼륨 삭제 후 재시작으로 초기화 성공.
|
|
||||||
|
|
||||||
- **GCP 방화벽:** 8000번 포트가 막혀 접속 불가 -> VPC 네트워크 방화벽 규칙 추가로 해결.
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
이 서비스의 핵심 기능을 해줄 weaver 서비스를 구현해야 함.
|
|
||||||
( 실제 blur 처리를 진행해줄 서비스 )
|
|
||||||
Reference in New Issue
Block a user