샤인의 IT (막 적는) 메모장

[Jenkins] 컨테이너 구성 및 기본 job 테스트 본문

DevOps

[Jenkins] 컨테이너 구성 및 기본 job 테스트

신샤인 2022. 11. 8. 19:58
반응형

노션에 정리했던 내용

 

 

VM 구성

  • VirtualBox 설치
  • Vagrant Setup
vagrant init

#Vagrantfile
vi Vagrantfile

Vagrant.configure("2") do |config|

  config.vm.box = "geerlingguy/centos7"

  #네트워크 private 설정
  config.vm.network "private_network", ip: "192.168.100.111"

  #네트워크 Public 설정
  config.vm.network "public_network"

  #리소스 설정
  config.vm.provider "virtualbox" do |vb|
  #   # Display the VirtualBox GUI when booting the machine
     vb.gui = true
  #
  #   # Customize the amount of memory on the VM:
     vb.memory = "2000"
     vb.cpus = 2
  end

end

vagrant up --provider=virtualbox
  • Linux Setup
#yum repo 변경
vi /etc/yum.repos.d/daum.repo
[base]

name=CentOS-$releasever - Base

baseurl=http://ftp.daum.net/centos/7/os/$basearch/

gpgcheck=1

gpgkey=http://ftp.daum.net/centos/RPM-GPG-KEY-CentOS-7

[updates]

name=CentOS-$releasever - Updates

baseurl=http://ftp.daum.net/centos/7/updates/$basearch/

gpgcheck=1

gpgkey=http://ftp.daum.net/centos/RPM-GPG-KEY-CentOS-7

[extras]

name=CentOS-$releasever - Extras

baseurl=http://ftp.daum.net/centos/7/extras/$basearch/

gpgcheck=1

gpgkey=http://ftp.daum.net/centos/RPM-GPG-KEY-CentOS-7

[centosplus]

name=CentOS-$releasever - Plus

baseurl=http://ftp.daum.net/centos/7/centosplus/$basearch/

gpgcheck=1

gpgkey=http://ftp.daum.net/centos/RPM-GPG-KEY-CentOS-7

yum repolist
yum clean all

yum update -y

 

 

(도커 설치 및 컨테이너 배포 노션에서 날라감....ㅠ)

 

  • 로그 확인
    • docker logs -f jenkins

  • 젠킨스 접속
    • jenkins:8080 접속

 

  • 어드민 정보 입력 후 로그인
    • 기본화면

  • 로컬 DNS 설정
    • hosts 파일 수정

기본 job 테스트

Jenkins Job 기본 테스트

  • New Item

 

  • Create Job - Freestyle Project

 

  • 명령어 실행

 

  • Build 후 확인

Job Redirect 테스트

#Job Command 변경
NAME="Shin"
echo "Hello, $NAME Current Time is $(date)" > /tmp/info

Job Bash Script

  • docker cp 명령어로 스크립트를 복사한다.
  • Jenkins Job에서 해당 스크립트를 실행한다.
  • 환경변수를 지정해서 실행해도 된다.
[vagrant@jenkins jenkins]$ vi script.sh
[vagrant@jenkins jenkins]$ chmod +x script.sh 
[vagrant@jenkins jenkins]$ ./script.sh Shin JS
Hello, Shin JS
[vagrant@jenkins jenkins]$ docker cp script.sh jenkins:/tmp/script.sh
[vagrant@jenkins jenkins]$ docker exec -it jenkins bash
jenkins@e96eaf47f2ca:/$ cd /tmp
jenkins@e96eaf47f2ca:/tmp$ ls
git_lfs_pub.gpg  hsperfdata_jenkins  info  jetty-0_0_0_0-8080-war-_-any-9539131192704472597  script.sh  winstone895485359093337936.jar

기본 Parameter 설정 - String Parameter

 

빌드 시 파라미터 설정이 나옴

 

List Parameter 설정 - Choice Parameter

Booloon/Logic Parameter 설정

#!/bin/bash

NAME=$1
LASTNAME=$2
SHOW=$3

if [ "$SHOW" = "true" ]; then
  echo "Hello, $NAME $LASTNAME"
else
  echo "If you want to see the name, please mark the show option"
fi

 

DB 연결 테스트

 

  • Dockerfile
FROM centos

RUN yum -y install openssh-server

RUN useradd remote_user && \\
        echo "Shin" | passwd remote_user --stdin && \\
        mkdir /home/remote_user/.ssh && \\
        chmod 700 /home/remote_user/.ssh

COPY remote-key.pub /home/remote_user/.ssh/authorized_keys

RUN chown remote_user:remote_user -R /home/remote_user/.ssh/ && \\
        chmod 600 /home/remote_user/.ssh/authorized_keys

RUN /usr/sbin/sshd-keygen

CMD /usr/bin/sshd -D
  • Host SSH 키 생성
[vagrant@jenkins centos7]$ ssh-keygen -f remote-key
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in remote-key.
Your public key has been saved in remote-key.pub.
The key fingerprint is:
SHA256:qri4/SB4jBrs9AX6GpACuhHNS/VrjdaVwuqe/M3yVRM vagrant@jenkins
The key's randomart image is:
+---[RSA 2048]----+
|    .            |
| o . . .   .     |
FROM centos
|o +   . o o   E  |
|o+ .   * o     . |
|* ..  * S     o  |
|==. .+ .     . . |
|*=+  .o     .    |
|+*+o.+ ..o .     |
|++==o +..o+      |
+----[SHA256]-----+

[vagrant@jenkins centos7]$ ls -al
total 12
drwxrwxr-x. 2 vagrant vagrant   64 Feb 27 05:24 .
drwxrwxr-x. 4 vagrant vagrant   84 Feb 27 05:16 ..
-rw-rw-r--. 1 vagrant vagrant  420 Feb 27 05:24 Dockerfile
-rw-------. 1 vagrant vagrant 1679 Feb 27 05:20 remote-key
-rw-r--r--. 1 vagrant vagrant  397 Feb 27 05:20 remote-key.pub
  • Docker-compose remote-host 추가
version: '3'
services:
  jenkins:
    container_name: jenkins
    image: jenkins/jenkins
    ports:
    - "8080:8080"
    volumes:
    - "$PWD/jenkins_data:/var/jenkins_home"
    environment:
    - "TZ=Asia/Seoul"
    networks:
    - net

  remote_host:
    container_name: remote-host
    image: remote-host
    build:
      context: centos7 #Dockerfile을 지정한 디렉토리 설정
    networks:
    - net

networks:
  net:
  • 안되서 트러블슈팅
#centos8 Dockerfile 변경
FROM centos:8

RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-Linux-* && \\
        sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-Linux-*

RUN yum -y install openssh-server

RUN useradd remote_user && \\
        echo "remote_user:Shin" | chpasswd && \\
        mkdir /home/remote_user/.ssh && \\
        chmod 700 /home/remote_user/.ssh

COPY remote-key.pub /home/remote_user/.ssh/authorized_keys

RUN chown remote_user:remote_user -R /home/remote_user/.ssh/ && \\
        chmod 600 /home/remote_user/.ssh/authorized_keys && \\

RUN ssh-keygen -A && rm -rf /run/nologin

CMD /usr/sbin/sshd -D

#Docker-compose 설정
#디렉토리 centos7 -> centos8 설정

docker run -it jenkins bash

ssh remote_user@remote_host
docker cp remote-key jenkins:/tmp/remote-key

#Jenkins 컨테이너 접속 후 확인
ssh -i remote-key remote_user@remote_host
  • SSH 플러그인 설치 - Jenkins 관리 - 시스템 구성 - ssh remote hosts 입력
    • 설정 시 Credential을 생성하여 Private Key를 입력해서 저장해야함

 

  • Remote Job - Build 실행 부분에 Command Remote Host 설정
    • Remote 서버에서 작업된 것을 확인할 수 있음

 

  • DB 컨테이너 생성
#docker-compose에 추가
db_host:
    container_name: db
    image: mysql:5.7
    environment:
    - "MYSQL_ROOT_PASSWORD=Shin"
    volume:
    - "$PWD/db_data:/var/lib/mysql"
    networks:
    - net

  • Remote Host → DB 접속
# Dockerfile에 mysql 설치
mysql -u root -h db_host -p

mysql> create database testdb;
Query OK, 1 row affected (0.00 sec)

mysql> use testdb;
Database changed

mysql> create table info (name varchar(20), lastname varchar(20), age int(2));
Query OK, 0 rows affected (0.11 sec)

mysql> desc info;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| name     | varchar(20) | YES  |     | NULL    |       |
| lastname | varchar(20) | YES  |     | NULL    |       |
| age      | int(2)      | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

mysql> insert into info values ('JS','Shin', 29);
Query OK, 1 row affected (0.00 sec)
  • AWS S3 & IAM 설정
  • DB 백업
#Remote에서 설정 시
[root@d025a8fcf18c /]# mysqldump --column-statistics=0 -u root -h db_host -p testdb > /tmp/db.sql

#Auto Backup 시

#!/bin/bash

DB_HOST=$1
DB_PASSWORD=$2
DB_NAME=$3

mysqldump --column-statistics=0 -u root -h $DB_HOST -p$DB_PASSWORD $DB_NAME > /tmp/db.sql

  • AWS에서 Job 실행 시
    • 기본 데이터는 Parameter로 설정한다.
    • 민감한 데이터는 Credential에서 저장하고 사용한다. → Build Environment에서 지정
  • 내부 테스트
    • DB 테이블 생성 후 호스트,이름만 기본 파라미터로 생성하고 패스워드만 Credential로 테스트 진행
 
반응형

'DevOps' 카테고리의 다른 글

[Jenkins] DSL & 파이프라인  (0) 2022.11.08
[Jenkins] 기본 설정 정리  (0) 2022.11.08
[DevOps] DevOps 기본 개념 정리  (0) 2022.01.15
Comments