[Jenkins] Jenkins TimeZone 변경하기

Jenkins에서 Project 및 Pipeline 등의 작업을 진행하면 작업 시간이 기록됩니다. 별도의 설정을 하지 않으면 기본 TimeZone으로 시간이 출력되기 때문에 TimeZone을 한국 시간인 Asia/Seoul로 변경하는 방법을 알아봅시다.

 

Jenkins TimeZone 변경하기

TimeZone 설정은 각 계정별로 관리되는 설정이므로 로그인한 계정의 설정 메뉴를 선택합니다.

 

 

User Defined Time Zone 설정에서 변경하고자 하는 TimeZone을 선택합니다.
선택 후 Save 버튼을 클릭하여 저장하면 TimeZone 변경 작업이 완료됩니다.

기존에 작업했던 작업 이력 시간이 변경된 TimeZone 시간으로 변경되어 출력됩니다.

 

 

Jenkins TimeZone 변경하는 작업을 완료하였습니다...! 끝...!

 

 

유익하게 보셨다면 공감을 눌러주고, 댓글로 의견을 공유해 남겨주시면 감사하겠습니다!

[Jenkins] Jenkins root 계정 패스워드 복구

Jenkins root 계정의 패스워드를 까먹었을 경우 복구하는 방법을 알아봅시다.

 

Jenkins 설정 파일 (config.xml) 파일 수정

Jenkins의 설정 파일인 config.xml 파일을 수정하여 잠시 로그인 없이도 관리 페이지에 접근할 수 있도록 설정이 가능합니다.

vi 에디터 등을 사용하여 Jenkins Home Dir 경로에 생성되어 있는 config.xml 파일의 아래와 같이 useSecurity 항목을 true에서 false로 변경합니다.

vi /{{Jenkins Home Dir}}/config.xml
<useSecurity>true</useSecurity>

 

config.xml 파일 내용(예시)
<?xml version='1.1' encoding='UTF-8'?>
<hudson>
  <disabledAdministrativeMonitors/>
  <version>2.387.1</version>
  <numExecutors>2</numExecutors>
  <mode>NORMAL</mode>
  <useSecurity>false</useSecurity>
  <authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy">
    <denyAnonymousReadAccess>true</denyAnonymousReadAccess>
  </authorizationStrategy>
  <securityRealm class="hudson.security.HudsonPrivateSecurityRealm">
    <disableSignup>true</disableSignup>
    <enableCaptcha>false</enableCaptcha>
  </securityRealm>
  <disableRememberMe>false</disableRememberMe>
  <projectNamingStrategy class="jenkins.model.ProjectNamingStrategy$DefaultProjectNamingStrategy"/>
  <workspaceDir>${JENKINS_HOME}/workspace/${ITEM_FULL_NAME}</workspaceDir>
  <buildsDir>${ITEM_ROOTDIR}/builds</buildsDir>
  <jdks/>
  <viewsTabBar class="hudson.views.DefaultViewsTabBar"/>
  <myViewsTabBar class="hudson.views.DefaultMyViewsTabBar"/>
  <clouds/>
  <scmCheckoutRetryCount>0</scmCheckoutRetryCount>
  <views>
    <hudson.model.AllView>
      <owner class="hudson" reference="../../.."/>
      <name>all</name>
      <filterExecutors>false</filterExecutors>
      <filterQueue>false</filterQueue>
      <properties class="hudson.model.View$PropertyList"/>
    </hudson.model.AllView>
  </views>
  <primaryView>all</primaryView>
  <slaveAgentPort>50000</slaveAgentPort>
  <label></label>
  <crumbIssuer class="hudson.security.csrf.DefaultCrumbIssuer">
    <excludeClientIPFromCrumb>false</excludeClientIPFromCrumb>
  </crumbIssuer>
  <nodeProperties/>
  <globalNodeProperties/>
  <nodeRenameMigrationNeeded>false</nodeRenameMigrationNeeded>
</hudson>

 

Jenkins 재시작

Jenkins의 설정 파일인 config.xml파일 수정 후 Jenkins를 재시작해야지만 설정이 적용되므로 Jenkins를 재시작해줍니다.
저는 Docker 환경에서 Jenkins를 실행했으므로 Jenkins 컨테이너를 재시작하겠습니다.

# docker restart server-jenkins
server-jenkins

# docker ps -a | grep server-jenkins
2dbe6e4b3f7b   jenkins/jenkins:lts-jdk11                                         "/usr/bin/tini -- /u…"   2 days ago    Up 12 minutes                   0.0.0.0:50000->50000/tcp, 0.0.0.0:8088->8080/tcp   server-jenkins

 

Jenkins 관리 페이지 접속 및 패스워드 복구

Jenkins 관리 페이지 접속 시 아래와 같이 사용자 이름 및 암호를 입력할 필요 없이 바로 관리자 페이지로 접속됩니다.

 

패스워드 복구를 위해 Jenkins -> Security -> Configure Global Securiy 메뉴를 접속합니다.

 

기존에 None 으로 설정되어 있었던 Security Realm 설정을 Jenkins' own user database 로 변경하고 사용자의 가입 허용을 체크하고 Save 버튼을 눌러 저장합니다.

 

설정 저장이 완료되면 기존에 없었던 Security -> Manage Users 메뉴가 생성되며 해당 메뉴를 접속합니다.

 

패스워드를 복구하고자 하는 계정의 톱니바퀴 버튼을 클릭하여 패스워드 변경 화면에 접속합니다.

 

변경하고자 하는 패스워드를 입력 후 Save 버튼을 눌러 저장합니다.

 

저장 완료 후 다시 로그인 버튼을 클릭하여 패스워드를 복구한 계정으로 접속하여 사용 가능합니다.

 

Jenkins root 계정 패스워드 복구하는 작업을 완료하였습니다...! 끝...!

 

 

유익하게 보셨다면 공감을 눌러주고, 댓글로 의견을 공유해 남겨주시면 감사하겠습니다!

 

 

 

[Reference]

[Jenkins] Jenkins Plugin HTTP 프록시 설정

Jenkins 서버가 내부 네트워크망에 있어 별도의 프록시 서버를 통해서만 외부 접근이 가능할 경우 외부에 접속하여 바로 설치할 수 있는 Plugin 조회 및 설치가 불가합니다.
HTTP 프록시를 설정하고 프록시 서버를 통해 Plugin 설치가 가능하도록 Plugin 설정을 알아봅시다.

 

Jenkins Plugin 설정 변경

Jenkins 관리 -> System Configuration -> 플러그인 관리 메뉴에 접속하여 Plugin 관련 설정을 추가합니다.

 

 

Advanced Setting 메뉴에서 HTTP 프록시 설정의 서버 항목과 포트 항목을 프록시 서버 정보로 설정한 후 Submit 버튼을 클릭하여 적용합니다.

 

 

HTTP 프록시 설정을 추가 완료하였으므로 Available Plugins 메뉴에서 설치하고자하는 Plugin 조회 및 설치가 가능합니다.

 

Jenkins Pulugin HTTP 프록시 설정을 추가하는 작업을 완료하였습니다...! 끝...!

 

 

유익하게 보셨다면 공감을 눌러주고, 댓글로 의견을 공유해 남겨주시면 감사하겠습니다!

 

 

 

[Reference]

[Jenkins] Jenkins 접속 URL 변경하기

최초로 Jenkins 설치 시 접속 URL을 설정할 수 있습니다.
Jenkins를 설치한 서버의 IP 또는 Domain이 변경되었을 경우 접속 URL을 변경해야 하므로 변경 방법을 알려드립니다.

 

Jenkins 접속 URL 변경

Jenkins 접속 URL 변경은 Jenkins 관리 메뉴의 시스템 설정으로 가능합니다.

Jenkins 메인 화면에서 Jenkins 관리 메뉴를 선택합니다.

 

 

Jenkins 관리 메는 Jenkins의 여러가지 설정을 할 수 있는 관리 페이지이며 URL 변경을 위해 시스템 설정을 선택합니다.

 

시스템 설정에서는 Jenkins 기본 정보 및 Job 관련 설정을 할 수 있습니다.
Jenkins Location 설정에서 Jenkins의 접속 URL을 변경할 수 있습니다.

 

간단히 Jenkins 접속 URL을 변경하는 작업을 완료하였습니다...! 끝...!

 

 

유익하게 보셨다면 공감을 눌러주고, 댓글로 의견을 공유해 남겨주시면 감사하겠습니다!

 

 

 

 

[Reference]

https://charmer.tistory.com/entry/Jenkins-Jenkins-%EC%A0%91%EC%86%8D-%EC%A3%BC%EC%86%8C%EB%A5%BC-IP%EB%A1%9C-%EB%B3%80%EA%B2%BD%ED%95%98%EA%B8%B0

[Jenkins] Docker 환경에서 Jenkins 서비스 설치

Jenkins는 지속적 통합(Continuous Integration)을 제공하는 툴입니다.
GitHub, GitLab과 같은 Code Repository와 연동하여 소스 코드의 커밋을 감지하여 빌드 및 테스트를 자동화 할 수 있습니다.
Docker 컨테이너를 통해 Jenkins 서비스를 설치해보겠습니다.

Jenkins docker-compose.yml 파일 작성

최신 LTS 버전인 jenkins/jenkins:lts-jdk11 이미지를 사용하여 Jenkins를 구성해보도록 하겠습니다.
서비스 포트인 8080번, 50000번 포트를 포워딩 설정하고, 주요 디렉토리를 마운트하도록 설정합니다.

services:
  jenkins:
    image: jenkins/jenkins:lts-jdk11
    container_name: server-jenkins
    restart: always
    ports:
      - 8080:8080
      - 50000:50000
    volumes:
      - /home/jenkins:/var/jenkins_home:rw

 

마운트 하고자 하는 디렉토리의 권한을 chown 명령어로 할당해줍니다.
권한을 할당하지 않으면 Jenkins 컨테이너 실행 시 권한 오류가 발생합니다.

mkdir /home/jenkins
chown 1000:1000 /home/jenkins

 

Jenkins 실행

설정 완료 후 docker-compose up -d 명령어로 컨테이너를 실행합니다.

# docker-compose up -d
Creating network "jenkins_default" with the default driver
Creating server-jenkins ... done

 

정상적으로 컨테이너가 생성되고 실행되었는지 확인합니다.

# docker ps -a | grep jenkins
28ca76f273c7   jenkins/jenkins:lts-jdk11      "/usr/bin/tini -- /u…"   8 minutes ago   Up 8 minutes                0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:50000->50000/tcp, :::50000->50000/tcp   server-jenkins

 

Jenkins 로그인 및 설치 확인

컨테이너 실행 완료 후 http://IP:8080 주소를 통해 Jenkins 웹 페이지에 접속합니다.

 

아래와 같이 약간의 로딩 시간이 걸릴 수 있습니다.

 

서비스 구동 완료 후 아래와 같이 로그인 화면이 출력됩니다.

 

initial 패스워드를 통해 접속 가능하며 서버에서 아래 경로에 명령어로 확인 가능합니다.

# cat /home/jenkins/secrets/initialAdminPassword
f9d91c45d67b4c1abe083acf718a6fd1

 

Jenkins를 설치한 환경이 Offline 환경이면 아래와 같이 Offline 화면이 나오며 Online 환경일 경우 플러그인을 설치할 수 있는 화면이 나옵니다. Install suggested plugins를 선택하여 플러그인 설치를 진행해보겠습니다.

 

Jenkins 커뮤니티에서 가장 유용하다고 생각하는 플러그인 설치가 진행됩니다.

 

플러그인 설치 완료 후 계정 설정과 URL 설정을 진행합니다.

 

마지막 설정을 끝으로 아래와 같이 Jenkins를 사용할 수 있습니다.

Jenkins에서 Code Repository와의 연동 및 CI 작업은 다음에 다뤄보도록 하겠습니다.

 

 

유익하게 보셨다면 공감을 눌러주고, 댓글로 의견을 공유해 남겨주시면 감사하겠습니다!

[Ansible] 시스템 OS 재시작 하기

Ansible의 reboot 모듈을 사용하여 Managed node의 OS를 재시작 가능합니다.

 

Playbook 생성

Managed node의 OS를 재시작하는 Playbook을 작성해봅니다.

OS 재시작 후 600초 동안 재시작이 완료되었는지 test_command 인 whoami 명령어를 통해 확인하는 Playbook 입니다.

- name: Reboot web-server
  reboot:
    msg: "Reboot initiated by Ansible"
    connect_timeout: 10                     
    reboot_timeout: 600
    pre_reboot_delay: 0
    post_reboot_delay: 0
    test_command: whoami
  • connect_timeout: 연결 대기 시간, OS 종료 시 SSH 연결 끊기 위한 설정
  • reboot_timeout: OS 재시작 후 최대 대기하는 시간
  • pre_reboot_delay: OS 재시작 전 기다리는 시간
  • post_reboot_delay: OS 재시작 후 명령어 입력 전 기다리는 시간
  • test_command: OS 재시작 후 정상적으로 시스템이 실행되었는지 확인하는 명령어

 

Playbook 실행

작성한 yml 파일을 실행하여 로그를 확인해봅니다.
상세 로그를 확인하기 위해 ansible-playbook 명령어에 -vv 옵션을 추가하였습니다.

ansible-playbook -i {{Inventory}} test_work.yml -vv

TASK [test_work : Reboot web-server] ************************************
task path: /deploy/roles/test_work/tasks/main.yml:4
changed: [node0] => {"changed": true, "elapsed": 148, "rebooted": true}
META: role_complete for node0
META: ran handlers
META: ran handlers

상세 로그를 통해 148초만에 해당 Managed node의 OS가 재시작된 것을 확인하실 수 있습니다.

 

 

직접 해당 노드에 접속해서 OS 재시작 시간을 아래와 같이 확인하실 수 있습니다.

# last reboot
reboot   system boot  3.10.0-1160.el7. Tue Mar  7 09:34 - 09:41 (3+00:07)

위 방법으로 Managed node의 OS 재시작 작업이 필요한 경우 사용하실 수 있습니다.

 

 

유익하게 보셨다면 공감을 눌러주고, 댓글로 의견을 공유해 남겨주시면 감사하겠습니다!

'Infrastructure As Code > Ansible' 카테고리의 다른 글

[Ansible] Yum 패키지 관리  (0) 2023.05.19
[Ansible] 도커 컨테이너 ID 가져오기  (0) 2023.02.20

[Ansible] 도커 컨테이너 ID 가져오기

도커 컨테이너의 ID로 여러가지 작업을 하기 위해 Ansible에서 도커 컨테이너의 ID를 가져오는 작업을 진행해봅니다.

 

Playbook 생성

web-server이름의 도커 컨테이너 ID를 가져오는 Playbook을 작성해봅니다.

- name: Regist web-server docker container id
  shell: docker ps -q -f "name=web-server"
  register: web_server_container_id

도커 컨테이너 ID는 web_server_container_id 이름으로 등록하였습니다.


테스트를 위해 web_server_container_id 의 전체 결과 값을 출력해보는 로직도 추가해봤습니다.

- name: Logging web_server_container_id
  debug:
    msg: "{{ web_server_container_id }}"

 

 

Playbook 실행

작성한 yml 파일을 실행하여 로그를 확인해봅니다.

ansible-playbook -i {{Inventory}} test_work.yml

TASK [test_work : Regist web-server docker container id] ***************************************************************************************************************************************************************************************
changed: [node0]

TASK [test_work : Logging web_server_container_id] *****************************************************************************************************************************************************************************************************
ok: [node0] => {
    "msg": {
        "changed": true,
        "cmd": "docker ps -q -f \"name=web-server\",
        "delta": "0:00:00.025528",
        "end": "2023-02-20 10:57:08.057040",
        "failed": false,
        "msg": "",
        "rc": 0,
        "start": "2023-02-20 10:57:08.031512",
        "stderr": "",
        "stderr_lines": [],
        "stdout": "c7326be211bf",
        "stdout_lines": [
            "c7326be211bf"
        ]
    }
}

전체 결과 값을 확인할 수 있으며 stdout 값에 도커 컨테이너 ID를 정상적으로 가져왔음을 확인할 수 있습니다.

 

실제 yml 파일에서 해당 값을 사용하려면 아래와 같이 .stdout를 추가하여 해당 값만 가져와 사용할 수 있습니다.

- name: Using web_server_container_id
  debug:
    msg: "{{ web_server_container_id.stdout }}"

 

위 방법으로 도커 컨테이너 ID를 Ansible에서 불러와 사용할 수 있습니다.

 

 

유익하게 보셨다면 공감을 눌러주고, 댓글로 의견을 공유해 남겨주시면 감사하겠습니다!

'Infrastructure As Code > Ansible' 카테고리의 다른 글

[Ansible] Yum 패키지 관리  (0) 2023.05.19
[Ansible] 시스템 OS 재시작 하기  (0) 2023.03.10

[Linux] 문자열 앞, 마지막 부분 출력하기

리눅스 head 명령어를 통해 문자열의 앞부분을 확인하거나 tail 명령어로 마지막 부분을 출력할 수 있습니다.

 

 

테스트 시 활용할 text 파일 내용

# cat text
An apple is a fruit.
The sky is blue.
Today is Monday.
Cutting paper with scissors.
Trees grow on the ground.
The sun rises in the east.
The earth is round.
The winter night air is cold.
Drinking water every morning.
The bus has already left.

 

 

문자열 앞부분 출력하기

  • 문자열 앞부분 두번째 줄까지 출력하기
  • -n 옵션을 사용하거나 직접 -2 숫자를 지정할 수 있습니다.
# cat text | head -n 2
An apple is a fruit.
The sky is blue.

# cat text | head -2
An apple is a fruit.
The sky is blue.

 

  • 문자열 앞부분부터 특정 바이트 단위까지 출력하기
  • -c 옵션 사용
# cat text | head -c 50
An apple is a fruit.
The sky is blue.
Today is Mon

 

 

문자열 마지막 부분 출력하기

  • 문자열 마지막 부분 세번째 줄까지 출력하기
  • -n 옵션을 사용하거나 직접 -2 숫자를 지정할 수 있습니다.
# cat text | tail -n 3
The winter night air is cold.
Drinking water every morning.
The bus has already left.

# cat text | tail -3
The winter night air is cold.
Drinking water every morning.
The bus has already left.

 

  • 문자열 마지막 부분부터 특정 바이트 단위까지 출력하기
  • -c 옵션 사용
# cat text | tail -c 50
ng water every morning.
The bus has already left.

 

 

유익하게 보셨다면 공감을 눌러주고, 댓글로 의견을 공유해 남겨주시면 감사하겠습니다!

+ Recent posts