Introduction

자주 사용하는 Python 함수들을 package로 생성하고 CI/CD pipeline을 Jenkins로 구축하여 자동으로 배포될 수 있게 해보자!
배포는 package 내부의 함수 및 객체를 sphinx로 문서화하고 PyPI (Python Package Index)에 업로드하여 pip로 설치할 수 있게 해볼 것이다.
CI/CD 계획은 아래와 같다.

  • Dev Branch Push
    1. Lint
    2. Build
    3. Test
  • Master Branch PR
    1. Lint
    2. Build
    3. Test
    4. Docs
  • Master Branch Puah
    1. Build
    2. Deploy
      1. PyPI
      2. GitHub

이 사항들을 Jenkins로 개발하고 blue ocean으로 확인해보면 아래와 같이 구성된다.

jenkinsfile

Read more »

Installation (Helm)

Argo CD로 Jenkins를 배포하기 위해 Helm으로 아래와 같이 helm chart를 받는다.

1
2
3
4
$ helm repo add jenkins https://charts.jenkins.io
$ helm repo update
$ helm pull jenkins/jenkins
$ tar -xvf jenkins-4.8.2.tgz

Traefik을 통해 ingress 설정을 https://jenkins.zerohertz.xyz로 정의했다.
따라서 values.yaml 파일을 아래와 같이 수정하고 배포했다.

values.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
...
controller:
...
jenkinsUrlProtocol: "https"
jenkinsUrl: "jenkins.zerohertz.xyz"
...
JCasC:
...
securityRealm: |-
local:
allowsSignup: false
enableCaptcha: false
users:
- id: "${chart-admin-username}"
name: "Jenkins Admin"
password: "${chart-admin-password}"
...

tada

Read more »

Installation

Install.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focal
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install openjdk-17-jdk
$ java -version
openjdk version "17.0.8.1" 2023-08-24
OpenJDK Runtime Environment (build 17.0.8.1+1-Ubuntu-0ubuntu120.04)
OpenJDK 64-Bit Server VM (build 17.0.8.1+1-Ubuntu-0ubuntu120.04, mixed mode, sharing)
$ javac -version
javac 17.0.8.1
$ sudo update-alternatives --config java
There is only one alternative in link group java (providing /usr/bin/java): /usr/lib/jvm/java-17-openjdk-amd64/bin/java
Nothing to configure.
$ vi ~/.zshrc
...

OS 버전 확인 및 업데이트 후 sudo apt-get install openjdk-${VERSION}-jdk로 JDK를 설치한다.
여기서 JDK는 Java Development Kit의 약자로 Java application을 개발하기 위한 software package다.
JDK는 개발, compile, debug 및 실행하는 데 필요한 모든 도구와 library를 포함한다.

Read more »

Introduction

개발을 하다보면 이런 페이지를 한번쯤 들어가본적 있을 것이다.
위 페이지와 같이 개발자로서 코드를 작성하는 것만큼 중요한 것은 해당 코드를 잘 문서화하는 것이다.
특히, 오픈 소스 프로젝트나 여러 사람들과 협업을 진행하는 큰 프로젝트에서는 코드의 문서화가 더욱 중요해진다.
문서화는 다른 개발자들이 코드를 이해하고 사용하는 데 큰 도움을 줄 뿐만 아니라, 코드의 유지 및 관리도 훨씬 쉬워진다.

Python은 그 자체로 간결하고 읽기 쉬운 언어이지만, 복잡한 패키지나 프로젝트를 다루게 되면 적절한 문서화 없이는 그 구조와 기능을 파악하기가 어려울 수 있다.
이때 필요한 것이 바로 문서화 도구다.
그 중에서도 Python 커뮤니티에서 널리 사용되는 도구가 바로 Sphinx다.

Sphinx는 Python 문서화를 위한 강력한 도구로, 간단한 마크다운 형식의 문서를 정교한 HTML, PDF, ePub 등의 형식으로 변환해준다.
또한, 다양한 플러그인과 확장 기능을 지원하여 문서의 내용뿐만 아니라 디자인, 구조, 그리고 상호 작용까지도 사용자의 필요에 맞게 커스터마이즈할 수 있다.

따라서 이 글에서는 Sphinx를 사용하여 Python 패키지를 어떻게 문서화하는지 간략히 알아본다.

Read more »

Introduction

박사 전문연구요원은 TEPS와 한국사능력검정시험을 응시하고 점수에 따라 자신의 학교에서 복무하면 된다.
하지만 석사 전문연구요원은 편입 과정이 박사 전문연구요원과는 다르게 별도의 시험을 응시하는 것이 아닌, 일반 취업과 같다.
물론 TO를 가지고 있는 기업만 편입이 가능하다.
아마 석사를 갓 졸업한 대학원생이고, 주위에 전문연구요원으로 재직하고 있는 선배 혹은 지인이 없다면 매우 막막할 것이라 생각한다.
편입을 위해 업체를 찾아볼 때 전문연구요원을 채용할 수 있는지, 자신의 분야와 맞는지, 복지는 어떤지, 연봉은 어떤지 등 고려할 것이 너무 많아 더욱 어려울 것이다.
회사 공식 페이지에는 구인 글이 존재하지만 사람인이나 wanted와 같은 플랫폼에 구인글이 올라오지 않아 접근성이 떨어지는 경우 TO를 보유한 기업 혹은 전문연구요원 복무자가 존재하는 업체 리스트를 산업지원 병역일터에서 확인할 수 있지만, 매번 다운로드하고 엑셀에서 일일히 찾아볼 수 없는 일이다.
그래서 아래와 같이 전문연구요원 TO를 가지고 있는 업체의 통계적 시각화와 시간에 따른 복무 인원 변화를 제공하는 프로젝트를 진행하게 됐다.
GitHub Actions로 자동화되어 10일에 한번 데이터 및 시각화 자료가 갱신된다.

이 프로젝트에서 얻거나 확인할 수 있는 것들은 아래와 같다.

  1. 시간에 따른 전문연구요원 업체의 데이터 (data/병역지정업체검색_YYYYMMDD.xls)
  2. 현재 전문연구요원 업체의 분야, 위치 등 시각화
  3. 시간과 업체에 따른 복무 인원 데이터 (prop/time.tsv) 및 시각화
Read more »