본문 바로가기
Develop/Jenkins

[Jenkins] REAEME.md 에 블로그 최신 글 가져오기

by J-rain 2024. 6. 10.

 

 

 

GitHub Readme에서 Latest Blog Post 부분에 Tistory에 작성한 글을 불러오고 싶었다.

 

그래서 Tistory에 글 작성 시 자동으로 GitHubREADME 파일을 업데이트 하도록 Jenkins를 이용해보려 한다.

 

Tistory에서 글 작성 시 자동으로 Jenkins가 실행되도록 하기 위해 Webhook을 설정해야 한다.

하지만 Tistory는 공식적으로 Webhook 기능을 제공하지 않지만, Tistory RSS 피드를 정기적으로 검사하여 Jenkins 트리거하는 방식으로 설계했다.

 

 

 

 

 

1. 플러그인 설치

Jenkins에서 GitHub와의 효과적인 연동을 위해 필요한 플러그인을 설치한다.

GitHub IntegrationHTTP Request 플러그인 설치

 

플러그인 설치 방법:
Jenkins 대시보드로 이동 후, 상단 메뉴에서 Manage Jenkins > Manage Plugins로 이동한다.
Available 탭에서 필요한 플러그인을 검색한다. GitHub Integration Plugin과 HTTP Request Plugin을 검색하고 설치한다.

설치완료 화면

 

 

 

2. GitHubJenkins 연동

GitHub 저장소와 Jenkins를 연동하기 위해 필요한 설정을 진행한다.

GitHub API 토큰 생성:
GitHub에 로그인한 후, 오른쪽 상단 프로필에서 Settings > Developer settings > Personal access tokens로 이동한다. Generate new token 버튼을 클릭하고, 필요한 권한을 선택한다. 토큰을 생성 저장한다.
Jenkins에서 GitHub 저장소 연결:
Jenkins 대시보드로 돌아가서 Manage Jenkins > Configure System으로 이동한다.
GitHub 섹션에서 Add GitHub Server를 클릭한다.
Credentials > Add를 클릭
Kind 는 Secret text 선택하여,
앞서 생성한 GitHub Personal Access Token을 Secret에 입력한다.

 

 

 

3. Jenkins Job 설정

새로운 Jenkins Job 생성:
Jenkins 대시보드에서 New Item을 선택한다.
이름을 입력하고 Freestyle project 또는 Pipeline을 선택한 후, OK를 클릭한다.

 

GitHub 서버 설정 및 토큰 추가 (이전에 Add한 Credential 선택)

 

 

실행할 스크립트 정의:
Build 섹션에서 Add build step을 선택하고, Execute shell 또는 Execute Windows batch command를 선택한다.
작성한 스크립트는 아래와 같다.

 

echo Installing necessary Python packages...
pip install feedparser

echo Running main.py script...
python main.py

echo Configuring Git...
git config --global user.email "j_raln@naver.com"
git config --global user.name "j_raln"

echo Adding and committing changes...
git add README.md
git commit -m "Updating Blog Posts"

echo Pushing changes to GitHub...
git push https://<token>@github.com/j-raln/j-raln.git HEAD:main
token부분에 GitHub Personal Access Token을 입력

 

 

스크립트 트리거 설정:
작업 설정에서 Build Triggers 섹션을 찾는다.
GitHub hook trigger for GITScm polling을 선택하거나, Poll SCM 옵션을 사용하여 정기적으로 저장소를 체크하도록 설정할 수 있다.

 

 

 

4. 깃허브 저장소에 main.py 작성

작성한 main.py 파일은 아래와 같다.

 

import feedparser

def fetch_latest_blog_posts(limit=3):
    feed = feedparser.parse("https://j-ra1n.tistory.com/rss")
    posts = []
    for entry in feed.entries[:limit]:
        title = entry.title
        link = entry.link
        posts.append((title, link))
    return posts

def update_readme(posts):
    with open("README.md", "r", encoding="utf-8") as file:
        readme_content = file.readlines()

    with open("README.md", "w", encoding="utf-8") as file:
        for line in readme_content:
            if "<!-- LATEST_BLOG_POSTS -->" in line:
                file.write("<!-- LATEST_BLOG_POSTS -->\n")
                for title, link in posts:
                    file.write(f'<a href="{link}" target="_blank">{title}</a><br>\n')
            else:
                file.write(line)

if __name__ == "__main__":
    latest_posts = fetch_latest_blog_posts()
    update_readme(latest_posts)

 

 

 

결과

글 작성

 

 

젠킨스 확인

 

README 확인

댓글