728x90
반응형

Jenkins Docker 설치 가이드 (Rocky9, jen 계정 기준)

1. 사전 준비

1-1. jen 계정 확인

sudo useradd -m jen
sudo passwd jen
sudo usermod -aG docker jen
  • Docker 명령어를 비루트 계정(jen)에서 실행 가능하도록 docker 그룹에 추가합니다.

1-2. 디렉토리 생성

sudo mkdir -p /hdd/jen/home
sudo chown -R jen:jen /hdd/jen
sudo chmod -R 750 /hdd/jen/home
  • /hdd/jen/home : Jenkins 홈 디렉토리 (데이터 영속화)
  • SELinux 환경에서는 :Z 옵션 사용

2. Docker / Docker Compose 설치 확인

docker --version
docker compose version
  • 설치되지 않았다면:
sudo dnf install -y dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo systemctl enable --now docker

3. Docker Compose 파일 생성

cd /hdd/jen
vi docker-compose.yml
version: '3.8'
services:
  jenkins:
    image: jenkins/jenkins:lts
    container_name: jenkins
    restart: always
    user: root                    # 일부 플러그인 설치를 위해 root 필요
    ports:
      - "8080:8080"               # 웹 UI
      - "50000:50000"             # agent 연결
    volumes:
      - /hdd/jen/home:/var/jenkins_home:Z
    shm_size: '512m'

설명

  • :Z → SELinux 컨텍스트 적용
  • 8080 → 브라우저 접속용
  • 50000 → Jenkins agent 연결용
  • shm_size → 빌드 시 메모리 공유 공간 확보

4. Jenkins 실행

cd /hdd/jen
docker compose up -d
  • 컨테이너 정상 실행 확인:
docker ps

5. 초기 설정

  1. 브라우저에서 접속:
http://서버IP:8080
  1. 초기 관리자 비밀번호 확인
docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword
  1. Jenkins 웹 UI에서 초기 비밀번호 입력 후

    • 추천 플러그인 설치
    • 관리자 계정 생성

6. 권한 및 SELinux 확인

sudo chown -R jen:jen /hdd/jen/home
sudo chmod -R 750 /hdd/jen/home
  • SELinux 활성화 시 :Z 옵션 필요

7. GitLab 연동 (선택 사항)

  1. Jenkins 플러그인 설치

    • GitLab Plugin
    • Git Plugin
  2. Jenkins에서 GitLab 서버 등록

    • URL: http://<GitLab 서버IP>:<포트>
    • Access Token 생성 → Jenkins Credential 등록
  3. Job 생성 → GitLab 프로젝트 빌드 가능


8. 컨테이너 관리

  • Jenkins 재시작
docker compose restart
  • 컨테이너 중지
docker compose down
  • 로그 확인
docker compose logs -f

참고 사항

  • /hdd/jen/home 경로는 Jenkins 데이터 전용. 컨테이너 삭제해도 데이터 보존됨
  • 호스트 방화벽에서 8080/50000 포트 열어야 외부 접근 가능
  • 운영 환경이면 SSL/HTTPS 적용 가능 (리버스 프록시 추천)
728x90
반응형

'04.DevTools' 카테고리의 다른 글

[SVN] SVN 사용법  (0) 2024.11.14
[IntelliJ] Intellij Gitlab 연동  (0) 2024.08.16
[Nexus]Centos7 nexus 설치 및 이클립스 연동  (0) 2022.04.21
728x90
반응형

이 문서는 Rocky Linux 9 환경에서 Harbor를 설치하고 설정하는 과정을 단계별로 정리한 가이드입니다. Docker 기반 설치 환경을 기준으로 합니다.


1. 사전 준비

1.1 서버 환경

  • OS: Rocky Linux 9
  • 최소 사양: CPU 2코어, RAM 4GB 이상, 디스크 40GB 이상

1.2 필수 패키지 설치

sudo dnf -y update
sudo dnf -y install curl wget tar dnf-plugins-core

1.3 Docker 설치

# 기존 Podman 또는 Docker 패키지 제거
sudo dnf remove podman-docker podman

# Docker CE 레포 추가
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# Docker CE 설치
sudo dnf -y install docker-ce docker-ce-cli containerd.io

# Docker 서비스 활성화
sudo systemctl enable --now docker

# 버전 확인
docker --version
docker-compose version

참고: Podman 환경에서는 Harbor install.sh가 Docker 버전 체크로 실패할 수 있으므로, 운영 환경에서는 Docker CE 설치를 권장합니다.

1.4 Docker Compose 설치

sudo curl -L "https://github.com/docker/compose/releases/download/2.29.2/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

2. Harbor 전용 계정 및 디렉토리 설정

2.1 Harbor 전용 계정 생성

sudo useradd -m -s /bin/bash harbor
sudo passwd harbor

2.2 Harbor 디렉토리 이름 변경 및 권한 설정

cd /opt
sudo mv harbor myharbor
sudo chown -R harbor:harbor myharbor

3. Harbor 다운로드 및 설정

3.1 Harbor 다운로드

wget https://github.com/goharbor/harbor/releases/download/v2.11.0/harbor-online-installer-v2.11.0.tgz
tar xvf harbor-online-installer-v2.11.0.tgz
cd harbor

3.2 설정 파일 준비

cp harbor.yml.tmpl harbor.yml
nano harbor.yml

harbor.yml 예시

hostname: harbor.example.com
http:
  port: 8080
harbor_admin_password: Harbor12345
data_volume: /home/harbor/data
  • hostname: Harbor 접속할 도메인 또는 IP
  • port: HTTP 포트 (운영 환경에서는 HTTPS 권장)
  • data_volume: Harbor 이미지 저장 위치, harbor 계정이 접근 가능해야 함

4. Harbor 설치

sudo ./install.sh
  • 설치 완료 후 컨테이너 확인:
docker ps
  • 주요 컨테이너: harbor-core, harbor-db, harbor-portal, harbor-registry

5. 웹 UI 접속

  • 브라우저 접속: http://harbor.example.com:8080
  • 기본 계정:
    • ID: admin
    • PW: Harbor12345

6. Docker 클라이언트에서 Harbor 로그인

docker login harbor.example.com:8080

7. 운영 환경 권장 설정

  • HTTPS 적용: 운영 환경에서는 Let’s Encrypt 등 SSL 인증서 적용 필수
  • 방화벽 설정:
sudo firewall-cmd --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
  • 데이터 저장소 용량 충분히 확보(/home/harbor/data)

8. 참고 사항

  • 테스트/개발 환경: HTTP, Docker CE 또는 Podman + Podman Compose 가능
  • 운영 환경: HTTPS 필수, Docker CE 설치 권장
  • 설치 시 Harbor install.sh에서 Docker 버전 체크 실패 시 Podman 사용 환경에서는 install.sh 수동 실행 또는 우회 필요
728x90
반응형
728x90
반응형

파이썬 테스트  Frame Work 종류와 장단점 및 간단한 사용 방법에 대해 설명 합니다. 

 

파이썬 테스트 프레임워크 (Python Test FrameWork)

  • 파이썬 에서 테스트 자동화를 위해 사용하는 테스트 Frame work 는 아래 리스트와 같다 
  • 일반적으로 가장 널리 사용 하는 pytestUnittest 기능과 간단한 동작을 할수 있는 예제를 다루겠습니다. 
프레임워크 주요 특징 사용 대상
Pytest 간결한 assert, 강력한 Fixture, 풍부한 플러그인 생태계
모든 파이썬 프로젝트 (가장 강력히 추천)
Unittest 파이썬 표준 라이브러리, 별도 설치 불필요, 객체지향 구조
외부 라이브러리 의존성을 최소화해야 하는 경우, 레거시 프로젝트
robot framework 키워드 기반 테스트
비개발자 친화적, GUI 자동화 + API 테스트 통합 가능
Doctest 문서 내 예제 코드를 테스트로 활용
라이브러리 문서의 예제 코드 검증
Behave BDD(행위 주도 개발) 스타일, 자연어 시나리오
기획자/비개발자와 테스트 시나리오를 공유해야 하는 프로젝트

 

pytest 

 

  • 간결한 문법: assert만 써도 검증 가능
  • 다양한 플러그인: HTML 리포트, 병렬 실행 등
  • pytest.mark로 범위/조건 제어 가능
  • 공식 문서는 아래 사이트에서 확인 할 수 있다.

pytest 프레임워크 구조 

Pytest는 전통적인 단위 테스트 프레임워크와 달리, 명시적인 TestCase 클래스 상속 없이도 테스트를 작성할 수 있게 해줍니다. 핵심 구조는 다음과 같습니다.

  • 테스트 함수 (Test Functions): Pytest는 test_*로 시작하는 모든 함수를 테스트로 인식합니다. 가장 기본적인 테스트 단위이며, 별도의 클래스나 상속 없이도 작동합니다.
  • 테스트 모듈 (Test Modules): test_*로 시작하는 파일(test_example.py, my_module_test.py 등) 내에 있는 테스트 함수들을 자동으로 찾아서 실행합니다.
  • 테스트 클래스 (Test Classes): 선택 사항이지만, 여러 테스트 함수를 그룹화하고 싶을 때 Test로 시작하는 클래스 안에 test_로 시작하는 메서드를 정의할 수 있습니다. 다만, unittest.TestCase를 상속받을 필요는 없습니다.
  • 픽스처 (Fixtures): 테스트를 실행하기 전후에 필요한 설정(setup) 및 해제(teardown) 작업을 수행하는 함수입니다. @pytest.fixture 데코레이터를 사용하여 정의하며, 테스트 함수에서 인자로 요청하면 자동으로 주입됩니다. unittest의 setUp/tearDown보다 훨씬 유연하고 강력한 기능을 제공합니다.
  • conftest.py 파일: 여러 테스트 파일에서 공유되는 픽스처나 훅(hook) 함수를 정의하는 데 사용됩니다. 이 파일은 pytest가 테스트를 찾을 때 자동으로 인식하며, 해당 디렉토리 및 하위 디렉토리의 모든 테스트에서 픽스처를 사용할 수 있게 합니다.
  • 플러그인 (Plugins): Pytest는 풍부한 플러그인 생태계를 가지고 있습니다. 코드 커버리지, HTML 리포트 생성, 분산 테스트 실행 등 다양한 기능을 플러그인을 통해 확장할 수 있습니다.

 

pytest 클래스 및 함수 호출 관계 및 순서

  • 함수 기반 테스트 흐름
test_파일.py
   │
   ├── def test_func():
   │       ├── pytest fixture 실행 (선택)
   │       ├── 테스트 실행
   │       └── cleanup 수행

 

  • 클래스 기반 테스트 흐름
TestClass:
    ├── @pytest.fixture(scope="class") → 클래스 전후
    ├── setup_method() → 각 test 함수 전
    ├── test_xxx() → 테스트 함수
    ├── teardown_method() → 각 test 함수 후

 

  • Pytest는 테스트를 발견하고 실행하는 과정에서 unittest와는 다른 접근 방식을 취합니다. setUp/tearDown 대신 픽스처를 통해 초기화 및 정리 작업을 관리하며, 이는 훨씬 유연한 제어를 가능하게 합니다.
  • 테스트 발견 (Test Discovery)
    • Pytest는 기본적으로 다음 규칙에 따라 테스트를 자동으로 찾아냅니다.
      • test_*.py 또는 *_test.py 패턴을 따르는 파일.
      • 이러한 파일 내에서 test_로 시작하는 함수.
      • Test로 시작하는 클래스 내에서 test_로 시작하는 메서드 (상속 불필요).
  • 실행 순서 및 픽스처 호출
  • Pytest는 테스트를 실행할 때, 각 테스트 함수가 필요로 하는 픽스처를 자동으로 감지하고 주입합니다. 픽스처는 정의된 스코프(scope) 에 따라 호출 시점과 정리 시점이 달라집니다.
  • 픽스처의 스코프는 다음과 같습니다
    • function (기본값): 각 테스트 함수가 실행될 때마다 픽스처가 호출되고, 테스트 함수가 끝난 후에 정리됩니다. (가장 일반적인 setUp/tearDown과 유사)
    • class: 해당 클래스 내의 모든 테스트 메서드가 실행되기 전에 한 번 호출되고, 클래스 내 모든 테스트가 끝난 후에 정리됩니다.
    • module: 해당 모듈 내의 모든 테스트가 실행되기 전에 한 번 호출되고, 모듈 내 모든 테스트가 끝난 후에 정리됩니다.
    • session: 전체 테스트 세션이 시작되기 전에 한 번 호출되고, 모든 테스트가 끝난 후에 정리됩니다. (가장 넓은 스코프)

호출 관계 및 순서 (픽스처 포함):

  1. 테스트 세션 시작: pytest 명령 실행
  2. session 스코프 픽스처 호출: 정의되어 있다면 가장 먼저 호출됩니다.
  3. 각 테스트 모듈 진입:
    • module 스코프 픽스처 호출: 해당 모듈의 테스트가 시작되기 전에 호출됩니다.
    • 각 테스트 클래스 진입 (선택 사항):
      • class 스코프 픽스처 호출: 해당 클래스의 테스트가 시작되기 전에 호출됩니다.
      • 각 test_ 메서드 실행:
        • function 스코프 픽스처 호출: 각 test_ 메서드가 실행되기 전에 호출됩니다.
        • 실제 test_ 메서드 실행: 테스트 로직이 수행됩니다.
        • function 스코프 픽스처 정리: test_ 메서드가 끝난 후에 정리됩니다.
      • class 스코프 픽스처 정리: 해당 클래스의 모든 테스트가 끝난 후에 정리됩니다.
    • module 스코프 픽스처 정리: 해당 모듈의 모든 테스트가 끝난 후에 정리됩니다.
  4. session 스코프 픽스처 정리: 모든 테스트 세션이 끝난 후에 정리됩니다.

이러한 픽스처 메커니즘은 테스트 간의 의존성을 줄이고, 재사용 가능한 설정/해제 코드를 작성하는 데 매우 효과적입니다.

pytest 테스트 사용 예제 

  • pytest test FrameWork 는 파이썬에서 기본 제공 하는 모듈이 아님니다. 
  • pip install pytest 를 통해 pytest 를 설치 합니다. 
pip install pytest
  • pytest_example.py 
import pytest

@pytest.fixture
def sample_data():
    print("\n[SETUP] Fixture 실행")
    return {"a": 1, "b": 2}

def setup_module(module):
    print("\n[SETUP_MODULE] 모듈 레벨 초기화")

def teardown_module(module):
    print("\n[TEARDOWN_MODULE] 모듈 종료 처리")

def setup_function(function):
    print(f"[SETUP_FUNCTION] 함수 {function.__name__} 시작")

def teardown_function(function):
    print(f"[TEARDOWN_FUNCTION] 함수 {function.__name__} 종료")

def test_add(sample_data):
    print("→ 실행: test_add")
    assert sample_data["a"] + sample_data["b"] == 3

def test_sub(sample_data):
    print("→ 실행: test_sub")
    assert sample_data["b"] - sample_data["a"] == 1

 

  • 테스트 결과 
  • -v , -s , --html=report.html 옵션을 통해 테스트 사용법을 익혀 보길 바랍니다. 
    • -v: verbose
    • -s: 표준 출력 표시
    • --html=report.html: HTML 리포트 생성 (pytest-html 필요):
      • pip install pytest-html 

  • pytest pytest_example.py -v -s --html=report.html 실행하면 프로젝트 에 report.html 파일이 생성 된다. 

 

 

pytest 테스트 사용 (conftest.py 적용)

  • conftest.py 설정을 통해 여러 테스트에서 공통으로 사용하는 fixture 를 공유 할수 있도록 케이스를 조금 변경 하겠습니다.
    • conftest.py (샘플데이터를 설정)
import pytest

@pytest.fixture
def sample_data():
    print("\n[SETUP] Fixture 실행")
    return {"a": 1, "b": 2}
  • pytest_example_conftest_test.py (테스트 용 예제)
import pytest

def setup_module(module):
    print("\n[SETUP_MODULE] 모듈 레벨 초기화")

def teardown_module(module):
    print("\n[TEARDOWN_MODULE] 모듈 종료 처리")

def setup_function(function):
    print(f"[SETUP_FUNCTION] 함수 {function.__name__} 시작")

def teardown_function(function):
    print(f"[TEARDOWN_FUNCTION] 함수 {function.__name__} 종료")
    
def test_add(sample_data):
    print("→ 실행: test_add")
    assert sample_data["a"] + sample_data["b"] == 3

def test_sub(sample_data):
    print("→ 실행: test_sub")
    assert sample_data["b"] - sample_data["a"] == 2

 

  • 실행결과
    • conftest.py  에 정의된 샘플데이터를 불러와서 pytest_example_conftest_test.py 에서 테스트슬 수행 하게 된다.
    • 테스트 결과 1건 성공 , 1건 실패로 테스트 출력 결과를 확인 할수 있으며
    • html 옵션을 사용할 경우 html 로 테스트 수행 결과를 보다 가시성 있게 확인이 가능 하다. 
    •  

unittest

 

  • Python 내장 테스트 프레임웍으로 별도 설치는 필요가 없고 파이썬만 설치되어 있으면 바로 사용할 수 있다. 
  • Java의 JUnit과 유사한 구조를 가진다.
  • xUnit 스타일: TestCase 클래스를 상속받아 테스트를 작성하며, assertEqual(), assertTrue() 등 다양한 assert 메서드를 제공합니다.
  • 전통적인 구조: 객체지향 프로그래밍에 익숙한 개발자에게 친숙한 구조를 가집니다.
  • 파이썬 unittest 모듈 공식 문서는 아래 사이트에서 확인 할수 있다. 
 

unittest — Unit testing framework

Source code: Lib/unittest/__init__.py(If you are already familiar with the basic concepts of testing, you might want to skip to the list of assert methods.) The unittest unit testing framework was ...

docs.python.org

Unittest 프레임워크 구조

  • Unittest 에서 주요하게 사용되는 클래스는 다음과 같다. 
    • unittest.TestCase: 테스트의 기본 단위입니다. 각 테스트 케이스는 하나 이상의 테스트 메서드를 포함하며, 이 메서드들은 test_로 시작합니다.
    • unittest.TestSuite: 여러 개의 TestCase나 TestSuite를 묶어서 한꺼번에 실행할 수 있게 해주는 클래스입니다.
    • unittest.TestLoader: TestCase 클래스에서 테스트 메서드를 자동으로 찾아서 TestSuite 객체로 만들어 주는 역할을 합니다.
    • unittest.TestRunner: TestSuite를 실행하고 결과를 보여주는 클래스입니다. 일반적으로 unittest.main() 함수가 이 역할을 대신 수행합니다.

Unittest 클래스 및 함수 호출 관계 및 순서

  • 호출 되는 흐름은 아래 그림과 같다.

 

  • 클래스 단위: TestSuite가 테스트를 시작하면, 각 TestCase 클래스에 대해 다음 메서드가 호출됩니다.
    • setUpClass(): 테스트 클래스 내의 모든 테스트 메서드가 실행되기 전에 단 한 번만 호출됩니다. 클래스 전체에 필요한 초기화 작업을 수행합니다.
    • tearDownClass(): 테스트 클래스 내의 모든 테스트 메서드가 실행된 후에 단 한 번만 호출됩니다. 클래스 단위의 정리 작업을 수행합니다.
  • 테스트 메서드 단위: TestSuite는 각 TestCase 클래스 내의 test_로 시작하는 각 테스트 메서드에 대해 다음 순서대로 메서드를 호출합니다.
    • setUp(): 각 테스트 메서드가 실행되기 전에 호출됩니다. 각 테스트가 독립적으로 동작하도록 초기화하는 역할을 합니다.
    • test_...(): 실제 테스트 로직이 담긴 메서드가 실행됩니다.
    • tearDown(): 각 테스트 메서드가 실행된 후에 호출됩니다. setUp()에서 할당된 리소스를 해제하는 정리 작업을 수행합니다.

 

Unittest 테스트 예제 

import unittest

class MyTest(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        print("setUpClass")

    def setUp(self):
        print("  setUp")

    def test_add(self):
        print("    test_add")
        self.assertEqual(1 + 1, 2)

    def test_sub(self):
        print("    test_sub")
        self.assertEqual(5 - 3, 2)

    def tearDown(self):
        print("  tearDown")

    @classmethod
    def tearDownClass(cls):
        print("tearDownClass")

if __name__ == '__main__':
    unittest.main()

 

 

 

  • 순서 호출 메서드 설명
1 setUpClass() 클래스 전체 테스트 전에 한 번 실행
2 setUp() 각 테스트 메서드 전에 매번 실행
3 test_*() 실제 테스트 실행
4 tearDown() 각 테스트 메서드 후에 매번 실행
5 tearDownClass() 클래스 테스트 후 한 번 실행
728x90
반응형
728x90
반응형
  • Gitlab 에서 보안 이슈로 버전 업그레이드가 필요한 상황에서 Gitlab 버전을 업그레이하는 방법에 대해 설명 합니다. 

현재 설치 버전 gitlab 정보 확인 

  • gitlab-rake gitlab:env:info 명령을 통해 확인 하거나 
  • gitlab 에 접속 해서 직접 설치 정보를 확인 하는 방법이 있습니다. 
 gitlab-rake gitlab:env:info
$ gitlab-rake gitlab:env:info

System information
System:
Current User:   git
Using RVM:      no
Ruby Version:   2.7.5p203
Gem Version:    3.1.4
Bundler Version:2.3.15
Rake Version:   13.0.6
Redis Version:  6.2.7
Sidekiq Version:6.4.0
Go Version:     unknown

GitLab information
Version:        15.1.2
Revision:       ea7455c8292
Directory:      /opt/gitlab/embedded/service/gitlab-rails
DB Adapter:     PostgreSQL
DB Version:     13.6
URL:            http://192.112.1.62:6060
HTTP Clone URL: http://1 192.112.1.62 :6060/some-group/some-project.git
SSH Clone URL:  git@1 192.112.1.62:some-group/some-project.git
Using LDAP:     no
Using Omniauth: yes
Omniauth Providers: 

GitLab Shell
Version:        14.7.4
Repository storage paths:
- default:      /var/opt/gitlab/git-data/repositories
GitLab Shell path:              /opt/gitlab/embedded/service/gitlab-shell

 

  • 업그레이드를 하기 위해서는 순차적으로 버전을 업그레이드 해야 합니다.
  • 15.x->18.x 버전으로 바로  최신 버전으로 업그레이드를 하면 안됩니다. 
  • 15.1.x -> 15.4.6 -> 15.11.13 -> 16.0.8 -> 16.3.7 -> 16.7.x -> 최신 16.x -0 ->17.x ->18.x 버전으로 단계적으로 업그레이드 단계를 수행 합니다. 

 

GitLab 백업 하기 

  • 업그레이드가 예기치 않은 이유로 실패 할수 있기때문에  버전을 업그레이드 하기 위해서는 반드시 백업을 수행 해야 합니다. 
  • gitlab-backup create  수행 하면 /var/opt/gitlab/backups/  디레톡리에 1753833159_2025_07_30_15.1.2_gitlab_backup.tar 형식의 압축 파일이 생성 됩니다. 
  • 백업 이후 설정 파일도 백업합니다. 
# GitLab 전체 백업 명령어 실행
sudo gitlab-backup create
sudo cp /etc/gitlab/gitlab.rb /etc/gitlab/gitlab.rb.bak
sudo cp /etc/gitlab/gitlab-secrets.json /etc/gitlab/gitlab-secrets.json.bak

 

$ gitlab-backup create
2025-07-30 08:52:39 +0900 -- Dumping database ... 
Dumping PostgreSQL database gitlabhq_production ... [DONE]
2025-07-30 08:52:54 +0900 -- Dumping database ... done
2025-07-30 08:52:54 +0900 -- Dumping repositories ... 
.................................
.................
2025-07-30 08:54:53 +0900 -- Warning: Your gitlab.rb and gitlab-secrets.json files contain sensitive data 
and are not included in this backup. You will need these files to restore a backup.
Please back them up manually.
2025-07-30 08:54:53 +0900 -- Backup 1753833159_2025_07_30_15.1.2 is done.
$ ls -lrt
⑷ 1217100
-rw------- 1 git git 1246310400  7” 30 08:54 1753833159_2025_07_30_15.1.2_gitlab_backup.tar
 
$ ls -al
⑷ 312
-rw-------. 1 root root  19200  6” 25 16:32 gitlab-secrets.json
-rw-------  1 root root  19200  7” 30 08:55 gitlab-secrets.json.bak
-rw-------  1 root root 137497  6” 25 16:31 gitlab.rb
-rw-------  1 root root 137497  7” 30 08:55 gitlab.rb.bak
drwxr-xr-x. 2 root root    155  9”  2  2024 ssl
drwxr-xr-x. 2 root root      6  7”  6  2022 trusted-certs

 

 

Gitlab 업그레이드 

  • 업그레이드 할 gitlab 버전을 확인 합니다. 
 yum list --showduplicates gitlab-ce

 

  • 설치 버전 선택시 gitlab-ce-[버전정보] 형식으로 패키지를 설치 하므로  설치할 버전을 정확하게 입력하고 설치 합니다. 
sudo yum install -y gitlab-ce-15.4.6-ce.0.el7

 

  • 업그레이드 버전이 설치가 완료되면 reconfigure 명령을 통해 변경된 설정을 Gitlab 에 적용 합니다. 
  • gitlab-ctl reconfigure 명령 수행 중에는 db(PostgreSQL ) 의 데이터 마이그레이션 작업 및 내부 업그레이드 작업들이 이루어 집니다. 
  • 정상적으로 작업이 완료 되면  gitlab-ctl start      & gitlab-ctl status 명령을 통해 업그레이드 작업이 정상적으로 완료 되었는지 최종 확인 합니다. 
$ sudo gitlab-ctl  status
run: alertmanager: (pid 15390) 48113s; run: log: (pid 1574) 12270431s
run: gitaly: (pid 15404) 48112s; run: log: (pid 12724) 48707s
run: gitlab-exporter: (pid 15426) 48112s; run: log: (pid 1557) 12270431s
run: gitlab-kas: (pid 15440) 48102s; run: log: (pid 1559) 12270431s
run: gitlab-workhorse: (pid 15454) 48102s; run: log: (pid 1555) 12270431s
run: logrotate: (pid 13090) 1296s; run: log: (pid 12699) 48710s
run: nginx: (pid 15474) 48101s; run: log: (pid 1556) 12270431s
run: node-exporter: (pid 15487) 48100s; run: log: (pid 1554) 12270431s
run: postgres-exporter: (pid 15493) 48100s; run: log: (pid 1549) 12270431s
run: postgresql: (pid 15504) 48099s; run: log: (pid 1550) 12270431s
run: prometheus: (pid 17054) 47458s; run: log: (pid 1558) 12270431s
run: puma: (pid 15815) 48068s; run: log: (pid 1551) 12270431s
run: redis: (pid 15820) 48067s; run: log: (pid 1548) 12270431s
run: redis-exporter: (pid 15827) 48067s; run: log: (pid 1546) 12270431s
run: sidekiq: (pid 15838) 48062s; run: log: (pid 1552) 12270431s

 

 

  • 보다 높은 최신 버전으로 업그레이드 하기 위해서는 단계적으로 상위 버전 gitlab 버전을 설치하는 단계를 반복 합니다. 

버전 업그레이드 정리

#Gitlab 설치 버전 정보 확인 
yum --showduplicates list gitlab-ce
#설정 적용 
gitlab-ctl reconfigure

#Gitlab 재시작 
gitlab-ctl restart

#Gitlab 상태 확인 
gitlab-ctl status

#gitlab 업그레이드 버전 정보 확인 
gitlab-rake gitlab:env:info

 

업그레이드 패스 확인 하기 (참고)

  • 아래 URL 에 접속 하면 버전 업그레이드시 확인해야 할 내용에 대해 세부적으로 자세히 내용을 들여다 볼수 있습니다. 

 

https://gitlab-com.gitlab.io/support/toolbox/upgrade-path/?distro=centos

 

Upgrade Path

 

gitlab-com.gitlab.io

 

 

 

728x90
반응형
728x90
반응형

작업패키지를 (일감) 을 OpenProject 에 일괄 업로드 하는 방법에 대해 알아봅니다. 

공식문서는 아래 링크를 참고 합니다. 

https://www.openproject.org/docs/system-admin-guide/integrations/excel-synchronization/

 

Excel synchronization with OpenProject

Excel synchronization with OpenProject

www.openproject.org

 

작업패키지 일감 일괄 등록 방법

  • OpenProjectExcel 유틸을 이용해서 일괄적으로 일감을 일괄 등록 하는 방법에 대해 설명합니다.

OpenProjectExcel 다운로드

  • 압축해제후 OpenProjectAPI.xlsm 파일을 실행 합니다. 

 

OpenProjectExcel 실행(OpenProjectAPI.xlsm)

  • 콘텐츠 사용 버튼을 클릭합니다. 

  • ctl+b 버튼을 클릭하면 업로드할 프로젝트 설정 정보 창이 오픈된다.
  • URL 텍스트 입력창에 프로젝트 URL 을 입력 하면 Intance URL , Project 항목이 자동 셋팅 된다.
  • API 토큰 정보는 우측 상단 계정설정 -> 액세스 토큰 메뉴를 선택후 접속 토큰을 생성 한다. 



  • OpenProject  프로젝트 정보를 모두 입력 하고 Accept 버튼을 클릭 하면 아래와 같이 컴파일 에러가 발생 한다. 
    • Tested on: Windows 10, Excel 16.0, VBA 7.1 에서 테스트 버전과 호환이 안되는것으로 보임 
    • 테스트한 버전은 Excel 2013 버전 
  • 코드 수정후 비주얼 베이직을 재실행 한다. 
    • "? -> "?" 수정
TextStr = Replace(TextStr, "\u00A1", "?", , , vbBinaryCompare)
TextStr = Replace(TextStr, "\u00A2", "?", , , vbBinaryCompare)

 

 

OpenProjectAPI 작업 패키지 동기화 및 업로드 

  • 다운로드 workpackages 를 누르면 작업패키지 항목이 다운로드 된다.

  • 항목을 추가 하고 싶다면 데이터생성후 Upload/Update 버튼을 클릭 한다.
    • 버전 잠금, ID 값을 미입력 하면 신규 작업패키지가 추가 되고 
    • 내용을 수정 하면 작업패키지가 수정 된다. 

  • 정상 업로드 되면 아래와 같이 Updatestatus 항목의 컬럼 값이 수정 된다. 
    • 수정 사항 발생 시 : Updatestatus -> 200-OK , 버전잠금 -> 숫자 증가.
    • 신규 추가 사항 반영시 : Updatestatus -> 201-Created ,  버전잠금 -> 숫자 1 생성 .

  • OpenProject 접속후 작업패키지를 확인시 추가 및 수정한 작업패키지 내용에 대한 변경 사항이 반영된것을 확인 할수 있다. 

 

작업 패키지 사용자 정의 필드 추가 작업 적용 

  • 업로드할 컬럼 정보(사용자 정의 필드) 를 추가 하고자 할경우 엑셀의 드랍다운 박스를 이용해 추가할 항목을 선택한다. 
  • 컬럼정보는 Attributes 시트에 작성 되어 있다. 

 

 

728x90
반응형

'테스트 > 관리도구' 카테고리의 다른 글

[OpenProject] OpenProject 환경 설정  (0) 2025.05.08
[OpenProject] OpenProject 설치  (0) 2025.04.09
728x90
반응형

OpenProject가 정상 설치되었다면 이제 OpenProject 를 사용하기 위한 기본 사용 환경 설정 방법에 대해 알아본다. 

 

OpenProject 한글 설정 방법

  • Account setting -> Setting ->Language 설정 -> 한국어 변경 

 

OpenProject 프로젝트 생성 

  • 좌측 상단 + 버튼을 클릭해서 프로젝트 관리하기 위한 신규 프로젝트를 생성 할수 있다. 

 

  • 릴리즈 이름으로 프로젝트가 생성 된다. 

  • OpenProject 는 작업 패키지 단위로 일감을 관리 할수 있다. 
  • 작업패키지 매뉴를 클릭해서 해야할 일을 등록 한다. 

  • 등록한 일감은 Gantt 차트 형식으로도 일정 관리를 할수 있다. 
  • 일감의 진행 시작 일자와, 종료일자를 등록 하고 현재 일감 상태를 변경 하면서 일감(작업패키지) 을 관리 한다.

  • 담당자 할당을 위해서는 사용자 등록/관리가 필요하다 . 
  • 사용자 등록 관리 방법에 대해 알아본다.

사용자관리 방법

  • 우측 상단 관리 매뉴를 선택한다.

  • 프로젝트를 관리하기 위한 다양한 기능을 지원한다. 
  • 사용자 및 권환 매뉴를 선택해서 openproject 에서 업무를 수행할 맴버를 추가 하고 관리 권한을 추가 한다. 

 

  • 계정이 생성되면 접속 비빌 번호를 설정 한다. 
  • 다음로그인 암호 변경 적용 체크 박스를 클릭하면 최초 사용자 접속시에 비밀번호 변경을 할수 있닷.

 

  • 사용자가가 접근 가능 한 프로젝트 항목을 선택하고 추가 버튼을 눌러서 역할 및 프로젝트 접근 권한을 부여 한다. 

  • 역할및 권한 메뉴에서는 역할 별로 프로젝트 관리 접근 권한을 설정 할수 있다. 

 

사용자 정의 필드

  • 작업패키지를 생성 하면 기본 제공 하는 필드로 충분히 업무 내용을 구분 할수 있지만 , 사용자 필드를 사용함으로서 
  • 프로젝트를 진행 하기 위해 필요한 항목을 추가 할수 있다. 
  • 관리 -> 사용자 저으이 필드 메뉴을 선택 해서 추가하고자 하는 사용자 정의 컬럼을 추가 한다. 
    • 아래 예시는 회의록 프로젝트에서 사용할 업무 필드에 대하 설정을 예시로 한다. 

  • 추가된 사용자 정의 필드를 사용하기 위해서는  업무 유형에 메뉴에서 추가된 업무 구분 필드를 추가해 주어야 한다. 
    • 관리-> 작업 패키지 -> 유형 이름 선택(Task) -> 양식 구성(탭) 

 

  • 프로젝트로 돌아와 작업패키지에서 컬럼 보기 설정 (톱니바퀴) 을 클릭해서 추가된 사용자 정의 필드를 추가 한다. 
  • 추가된 컬럼을 드래그&드랍 을 통해 컬럼 보기 순서를 지정할수 있다. 

 

  • 지정한 사용자 정의 컬럼을 다른 사용자와 공유 하기 위해서는 보기 저장 기능을 사용해서 업무 리스트를 같이 볼수 있다. 
 
  • 사용자가 지정한 필터를 추가 해서 새로운 이름의 보기형식을 저장 할수도 있다. 

 

 

728x90
반응형
728x90
반응형

사전 환경 구성 

[openprj@centos7:/data1/openprj]$ docker --version
Docker version 26.1.4, build 5650f9b
[openprj@centos7:/data1/openprj]$ docker-compose  --version
docker-compose version 1.29.2, build 5becea4c

 

Openproject 다운로드 

  • openproject 를 git clone 으로 다운로드 받는다.
    • 설치 버전은 openproject 15 버전을 다운로드 받아 설치 한다.  

  • 다운로드 받은 openproject 폴더로 이동후 docker pull 을 통해 openproject 이미지를 다운로드 받는다. 
git clone https://github.com/opf/openproject-deploy --depth=1 --branch=stable/15 openproject

cd openproject/

#도커 이미지를 내려받는다.
docker-compose pull

# 설정 파일 복사 
#OpenProject 설정 파일을 복사후 설치할 환경 정보에 맞게 수정을 한다.
cp .env.example .env

#openproject 컨테이너를 기동한다. 
docker-compose up -d
  • openproject 디렉토리 
:/home/openprj/openproject]$ tree -L 3
.
|-- README.md
|-- compose
|   |-- README.md
|   |-- control
|   |   |-- Dockerfile
|   |   |-- README.md
|   |   |-- backup
|   |   `-- upgrade
|   |-- docker-compose.control.yml
|   `-- docker-compose.yml
`-- kubernetes
    `-- README.md

5 directories, 7 files

docker-compose pull

[openprj@centos7:/data1/openprj/openproject]$ docker-compose pull   
Pulling db       ... done
Pulling cache    ... done
Pulling autoheal ... done
Pulling seeder   ... done
Pulling cron     ... done
Pulling worker   ... done
Pulling web      ... done
Pulling proxy    ... done

 

.env 파일 수정 

  • OPENPROJECT_HOST__NAME : openproject 설치 호스트 ip 정보 
  • PORT=5055 : 접속 포트 (접속 포트 변경 필요시 수정 필요)
  • PGDATA="./pgdata" : postsgresql data 경로 
  • OPDATA="./opdata/assets" : openproject 데이터 경로
    • 접근권한 에러가 발생 하기 때문에  openproject 디렉토리 접근 권한을 변경 한다. 
    • chmod -Rf 777 opdata/ 
    • sudo chown -Rf openprj.openprj opdata pgdata    
      • seeder_1    | Errno::EACCES: Permission denied @ dir_s_mkdir - /var/openproject/assets/files (Errno::EACCES)
TAG=15-slim
OPENPROJECT_HTTPS=false
OPENPROJECT_HOST__NAME=192.168.116.12
PORT=5055
OPENPROJECT_RAILS__RELATIVE__URL__ROOT=
IMAP_ENABLED=false
DATABASE_URL=postgres://postgres:p4ssw0rd@db/openproject?pool=20&encoding=unicode&reconnect=true
RAILS_MIN_THREADS=4
RAILS_MAX_THREADS=16
PGDATA="./pgdata"
OPDATA="./opdata/assets"

 

openproject container 기동 

  • docker-compose up  -d       
  • 정상 기동되면 아래와 같이 컨테이너가 실행 된다. 
    • docker-compose ps -a  : openproject 컨테이너 기동 상태 확인 
[openprj@centos7:/data1/openprj/openproject]$ docker-compose up  -d                         
Creating network "openproject_backend" with the default driver
Creating network "openproject_default" with the default driver
Creating network "openproject_frontend" with the default driver
Creating volume "openproject_pgdata" with default driver
Creating volume "openproject_opdata" with default driver
Creating openproject_autoheal_1 ... done
Creating openproject_db_1       ... done
Creating openproject_seeder_1   ... done
Creating openproject_cache_1    ... done
Creating openproject_cron_1     ... done
Creating openproject_web_1      ... done
Creating openproject_worker_1   ... done
Creating openproject_proxy_1    ... done
[openprj@centos7:/data1/openprj/openproject]$ docker-compose ps -a                         
         Name                       Command                       State                                        Ports                              
--------------------------------------------------------------------------------------------------------------------------------------------------
openproject_autoheal_1   /docker-entrypoint autoheal      Up (healthy)                                                                            
openproject_cache_1      docker-entrypoint.sh memcached   Up                      11211/tcp                                                       
openproject_cron_1       ./docker/prod/entrypoint-s ...   Up                      8080/tcp                                                        
openproject_db_1         docker-entrypoint.sh postgres    Up                      5432/tcp                                                        
openproject_proxy_1      caddy run --config /etc/ca ...   Up                      2019/tcp, 443/tcp, 443/udp, 0.0.0.0:5050->80/tcp,:::5050->80/tcp
openproject_seeder_1     ./docker/prod/entrypoint-s ...   Up                      8080/tcp                                                        
openproject_web_1        ./docker/prod/entrypoint-s ...   Up (health: starting)   8080/tcp                                                        
openproject_worker_1     ./docker/prod/entrypoint-s ...   Up                      8080/tcp 

Openproject  접속

  • 최초 접속후 admin 비번을 수정해줘야 한다. 

  • 비밀번호를 변경하고 접속 하게 되면 openproject 메인 화면을 확인 할수 있다. 

 

  • 한국어 설정을 원할경우 My account -> settting -> Language 에서 한국어를 선택 한다. 
728x90
반응형
728x90
반응형

 

dial unix /run/user/0/bus: connect: permission denied 에러 

  • 현상:
    • level=error msg="failed to move the rootless netns pasta process to the systemd user.slice: dial unix /run/user/0/bus: connect: permission denied"
    • rootless 환경에서 Podman을 실행 중인데, DBus 및 systemd 관련 문제가 있어 발생 하는 문제 
[pod_svc]          | time="2025-02-21T15:41:15+09:00" level=error msg="failed to move the rootless netns pasta process to the systemd user.slice: dial unix /run/user/0/bus: connect: permission denied"
[pod_svc]          | [WARN  netavark::dns::aardvark] Failed to delete aardvark-dns entries after failed start: failed to get aardvark pid: IO error: No such file or directory (os error 2)
[pod_svc]          | time="2025-02-21T15:41:15+09:00" level=error msg="Removing timer for container e2d4353bc33469927b0a0a41092a5f89f8c11f2dd1e58c7ea43c14ce3c47277f healthcheck: unable to get systemd connection to remove healthchecks: lstat /tmp/storage-run-1014/systemd: no such file or directory"
[pod_svc]          | Error: unable to start container e2d4353bc33469927b0a0a41092a5f89f8c11f2dd1e58c7ea43c14ce3c47277f: netavark: IO error: Error while applying dns entries: IO error: aardvark-dns failed to start: Failed to connect to bus: No such file or directory

 

  • 조치 
    • Linger=yes 설정 확인 
whoami
id
loginctl show-user $(whoami)
loginctl enable-linger $(whoami)
  • DBus 및 systemd user session 문제 해결
    • 모든 네트워크 및 DNS 설정 삭제 & Podman 시스템 전체 초기화 
rm -rf ~/.config/containers/aardvark-dns
rm -rf ~/.local/share/containers/networks

podman system reset

 

 

Error: creating container storage: the container name "ora19c" is already in use

[oracle19c@rocky9:/nvme/oracle19c/ora19c]$ podman compose -f docker-compose.ora19c.yml up -d 
>>>> Executing external compose provider "/usr/bin/podman-compose". Please see podman-compose(1) for how to disable this message. <<<<

podman-compose version: 1.0.6
['podman', '--version', '']
using podman version: 5.2.2
** excluding:  set()
['podman', 'ps', '--filter', 'label=io.podman.compose.project=ora19c', '-a', '--format', '{{ index .Labels "io.podman.compose.config-hash"}}']
['podman', 'network', 'exists', 'ora19c_default']
podman run --name=ora19c -d --label io.podman.compose.config-hash=b535161f910884a22b7eee1fc1500d4d42875ca62d69eb37d5df64cb0aab6066 --label io.podman.compose.project=ora19c --label io.podman.compose.version=1.0.6 --label PODMAN_SYSTEMD_UNIT=podman-compose@ora19c.service --label com.docker.compose.project=ora19c --label com.docker.compose.project.working_dir=/nvme/oracle19c/ora19c --label cohttp://m.docker.compose.project.config_files=docker-compose.ora19c.yml --label com.docker.compose.container-number=1 --label com.docker.compose.service=ora19c --env-file /nvme/oracle19c/ora19c/ora19env -v /nvme/oracle19c/ora19c/oradata/ora19_data:/opt/oracle/oradata -v /nvme/oracle19c/ora19c/tibero:/opt/tibero -v /nvme/oracle19c/ora19c/archive:/home/oracle/archive -v /nvme/oracle19c/ora19c/prs_data:/home/oracle --net ora19c_default --network-alias ora19c -p 1521:1521 -p 5500:5500 --privileged oracle/database:19.3.0-ee
Error: creating container storage: the container name "ora19c" is already in use by 4f831c2930bfbd6b2f5896b31b64a0cf0496fa160d0cd2ee3d1382293a06b08d. You have to remove that container to be able to reuse that name: that name is already in use by an external entity, or use --replace to instruct Podman to do so.
exit code: 125
podman start ora19c
Error: no container with name or ID "ora19c" found: no such container
exit code: 125
  • podman ps -a  | grp [container 이름]:현재 실행 중인  컨테이너 확인
  • 실행중인 컨테이너 삭제 
  • 삭제 안될시 강제 삭제 
#컨테이너 중지및 삭제 
podman stop ora19c
podman rm ora19c

#컨테이너 명으로 삭제 
podman rm -f ora19c
#컨테이너 ID 로 삭제 
podman rm -f 4f831c2930bf

 

[oracle19c@rocky9:/nvme/oracle19c/ora19c]$ podman compose -f docker-compose.ora19c.yml up -d 
>>>> Executing external compose provider "/usr/bin/podman-compose". Please see podman-compose(1) for how to disable this message. <<<<

podman-compose version: 1.0.6
['podman', '--version', '']
using podman version: 5.2.2
** excluding:  set()
['podman', 'ps', '--filter', 'label=io.podman.compose.project=ora19c', '-a', '--format', '{{ index .Labels "io.podman.compose.config-hash"}}']
['podman', 'network', 'exists', 'ora19c_default']
podman run --name=ora19c -d --label io.podman.compose.config-hash=b535161f910884a22b7eee1fc1500d4d42875ca62d69eb37d5df64cb0aab6066 --label io.podman.compose.project=ora19c --label io.podman.compose.version=1.0.6 --label PODMAN_SYSTEMD_UNIT=podman-compose@ora19c.service --label com.docker.compose.project=ora19c --label com.docker.compose.project.working_dir=/nvme/oracle19c/ora19c --label cohttp://m.docker.compose.project.config_files=docker-compose.ora19c.yml --label com.docker.compose.container-number=1 --label com.docker.compose.service=ora19c --env-file /nvme/oracle19c/ora19c/ora19env -v /nvme/oracle19c/ora19c/oradata/ora19_data:/opt/oracle/oradata -v /nvme/oracle19c/ora19c/tibero:/opt/tibero -v /nvme/oracle19c/ora19c/archive:/home/oracle/archive -v /nvme/oracle19c/ora19c/prs_data:/home/oracle --net ora19c_default --network-alias ora19c -p 1521:1521 -p 5500:5500 --privileged oracle/database:19.3.0-ee
a20067f10d1356d05aee1f7ae38477ba261ba978a702d6bf81011a4c9bbe240c
[oracle19c@rocky9:/nvme/oracle19c/ora19c]$ podman ps -a
CONTAINER ID  IMAGE                                COMMAND               CREATED        STATUS        PORTS                                           NAMES
a20067f10d13  localhost/oracle/database:19.3.0-ee  /bin/bash -c exec...  3 minutes ago  Up 3 minutes  0.0.0.0:1521->1521/tcp, 0.0.0.0:5500->5500/tcp  ora19c

 

 

728x90
반응형

'02.Docker & Podman > Podman' 카테고리의 다른 글

[podman] podman 기본 사용 셋팅  (0) 2025.02.14
728x90
반응형

Django Unit Test

  • github 에서 Django 를 git clone 하면 ~/django/tests 디렉토리에 테스트 스위트가 있다.
  • 테스트 환경은 Tibero7 과 Django 5.1 버전을 연동하여 테스트해본다.
  • Django 5.1  사용하기 위해서는 Python 3.10 버전 이상을 설치해야 한다. 
  • https://docs.djangoproject.com/ko/5.1/faq/install/
 

자주묻는 질문: 설치 | Django documentation

The web framework for perfectionists with deadlines.

docs.djangoproject.com

 

 

Django UnitTest 환경 셋팅

$ git clone https://github.com/YourGitHubName/django.git django-repo
$ cd django-repo/tests
$ python -m pip install -e ..
$ python -m pip install -r requirements/py3.txt
$ ./runtests.py

 

Django UnitTest 수행

  • runtests.py  실행하여 단위 테스트를 실행할 수 있다.
  •  --settings=[테스트 환경 설정 정보] 접속 및 테스트 수행 관련 정보를 작성 한 설정 파일이다.
python runtests.py --settings=test_tibero

#특정 테스트 스위트만 수행 하고 자 할때
python runtests.py --settings=test_tibero  generic_relations

#수행된 SQL 정보를 확인하고 싶다면  --debug-sql 옵션을 추가 합니다.
./runtests.py --settings=test_tibero  queries  --debug-sql

#--verbosity=3 옵션을 적용 하면 현재 테스트 진행중인 SQL 실행 내역을 실시간으로 확인 가능 합니다. 
./runtests.py --settings=test_tibero  queries  --debug-sql --verbosity=3

(v_djangoenv) [django@my-rocky9.4:/home/django/django/tests]$ python runtests.py --settings=test_tibero  generic_relations
Testing against Django installed in '/home/django/v_djangoenv/lib/python3.10/site-packages/django' with up to 4 processes
Found 82 test(s).
Creating test database for alias 'default'...
Creating test user...
System check identified no issues (0 silenced).

Running tests...
----------------------------------------------------------------------
  test_absolute_max (generic_relations.test_forms.GenericInlineFormsetTests) ... ok (0.098s)
  test_absolute_max_with_max_num (generic_relations.test_forms.GenericInlineFormsetTests) ... ok (0.006s)
  test_can_delete_extra (generic_relations.test_forms.GenericInlineFormsetTests) ... ok (0.001s)
  test_disable_delete_extra (generic_relations.test_forms.GenericInlineFormsetTests) ... ok (0.001s)

----------------------------------------------------------------------
Ran 82 tests in 1.110s

OK

Generating XML reports...
Generated XML report: /home/django/django/tests/output/xunit/TEST-generic_relations.test_forms.GenericInlineFormsetTests-20250312185624.xml
Generated XML report: /home/django/django/tests/output/xunit/TEST-generic_relations.tests.GenericRelationsTests-20250312185624.xml
Generated XML report: /home/django/django/tests/output/xunit/TEST-generic_relations.tests.ProxyRelatedModelTest-20250312185624.xml
Generated XML report: /home/django/django/tests/output/xunit/TEST-generic_relations.tests.TestInitWithNoneArgument-20250312185624.xml
Destroying test database for alias 'default'...
Destroying test user...
Destroying test database tables...

  • ./runtests.py --help 를 통해 보다 다양한 옵션에 대한 사용법에 대해 알아 볼수 있다.

 

Django UnitTest 결과 확인

  • 테스트 수행 결과를 확인하기 위해서는 xmlrunner 패키지를 추가해서 테스트를 진행하면 된다.
  • 테스트 수행이 완료되면 TEST_OUTPUT_DIR 로 설정한 디렉토리에 xml 파일로 Reporting 결과가 남고
  • junit2html 팩키지를 통해 xml 파일을 html 파일로 변경 하면 가독성면에서 테스터가 결과를 한눈에 확인 가능 하다.
  • 또한 allure 팩키지를 사용 하면 html 파일 보다 더욱 가독성있게 테스트결과를 한눈에 확인 가능 하다 (추천)
pip install unittest-xml-reporting
pip install allure-pytest
pip install junit2html   
  • test_tibero.py 설정 추가
TEST_OUTPUT_DIR = "/home/django/django/tests/output/xunit"
TEST_RUNNER = 'xmlrunner.extra.djangotestrunner.XMLTestRunner'
TEST_OUTPUT_VERBOSE = 2  # 상세 출력
TEST_OUTPUT_DESCRIPTIONS = True

HTML 파일로 변경 해서 결과 확인 하는 방법

  • junit2html 를 통해 xml 결과 html 로 변경 하는 방법
    • TEST-generic_relations.tests.GenericRelationsTests-20250312034521.xml -> report.html 파일로 변경
junit2html /home/django/django/tests/output/xunit/TEST-generic_relations.tests.GenericRelationsTests-20250312034521.xml 
/home/django/django/tests/output/xunit/report.html

allure 를 사용 해서 브라우저를 통해 결과 확인 하는 방법

  • allure 최신 버전 다운로드 후 설치를 진행 한다.
wget https://github.com/allure-framework/allure2/releases/download/2.21.0/allure-2.21.0.tgz

tar -xvzf allure-2.21.0.tgz
sudo mv allure-2.21.0 /opt/allure

sudo ln -s /opt/allure/bin/allure /usr/local/bin/allure
allure --version
  • 테스트 실행 후 Allure 결과 생성
allure generate /home/django/django/tests/output/xunit -o /home/django/django/tests/output/allure_report --clean
  • 정상적으로 리포팅 결과 가 변환 되면 allure_report 디렉토리에 여러 파일들이 생성 된다 .
(v_djangoenv) [django@my-rocky9.4:/home/django/django/tests/output/xunit]$ ll
합계 28
-rw-r--r--. 1 django django  3640  3월 13 08:59 TEST-generic_relations.test_forms.GenericInlineFormsetTests-20250312185949.xml
-rw-r--r--. 1 django django 14721  3월 13 08:59 TEST-generic_relations.tests.GenericRelationsTests-20250312185949.xml
-rw-r--r--. 1 django django  1933  3월 13 08:59 TEST-generic_relations.tests.ProxyRelatedModelTest-20250312185949.xml
-rw-r--r--. 1 django django   449  3월 13 08:59 TEST-generic_relations.tests.TestInitWithNoneArgument-20250312185949.xml
  • /home/django/django/tests/output/allure_report 
(v_djangoenv) [django@my-rocky9.4:/home/django/django/tests/output/allure_report]$ ll
합계 2296
-rw-r--r--.  1 django django  776554  3월 13 08:59 app.js
drwxr-xr-x.  4 django django    4096  3월 13 09:00 data
drwxr-xr-x.  2 django django      73  3월 13 08:59 export
-rw-r--r--.  1 django django   15086  3월 13 08:59 favicon.ico
drwxr-xr-x.  2 django django     132  3월 13 08:59 history
-rw-r--r--.  1 django django     665  3월 13 08:59 index.html
drwxr-xr-x. 11 django django     137  3월 13 08:59 plugins
-rw-r--r--.  1 django django 1542785  3월 13 08:59 styles.css
drwxr-xr-x.  2 django django    4096  3월 13 09:00 widgets
  • index.html 파일을 실행 하면 결과 확인이 가능 하다.
  • http://127.0.0.1:3001/django/tests/output/allure_report/index.html 

728x90
반응형
728x90
반응형

7z 파일 압축 해제 방법 

  • 압축 해제 방벙 
#7z 파일 압축 해제
7z x 파일명.7z

#특정 폴더에 압축 해제
7z x 파일명.7z -o/경로/디렉토리

#압축 해제 시 기존 파일 덮어쓰기 없이 진행
7z x 파일명.7z -o/경로/디렉토리 -aos

#암호가 걸린 7z 파일 압축 해제방법
7z x 파일명.7z -p비밀번호

# 압축된 파일 내부 목록 확인
7z l 파일명.7z
  • 에러발생시 팩키지 설치 필요 
Last metadata expiration check: 3:26:19 ago on Mon Feb 24 17:53:46 2025.
No match for argument: p7zip
No match for argument: p7zip-plugins Error: Unable to find a match: p7zip p7zip-plugins
#EPEL 저장소를 활성화
sudo dnf install -y epel-release

#설치
sudo dnf install -y p7zip p7zip-plugins

 

7z 파일 압축  방법 

  • 압축 방법 
#기본 7z 압축 방법
#7z a 압축파일명.7z 파일명

7z a archive.7z myfile.txt

#여러 개의 파일을 압축
#7z a archive.7z 파일1 파일2 디렉토리
7z a mydata.7z file1.txt file2.txt folder1/

#특정 확장자의 파일만 압축
7z a archive.7z *.txt

#암호 설정  압축
#7z a -p비밀번호 archive.7z 파일명
7z a -p1234 secret.7z confidential.txt

 

 

 

728x90
반응형

+ Recent posts