Jenkins + Ansible 을 사용 하여 자동화 배치 Nginx 실현

6467 단어

본 고 는 Jenkins + Ansible 을 어떻게 사용 하여 Nginx 에 대한 자동화 배 치 를 실현 하 는 지 소개 한다.최종 적 으로 달성 한 효 과 는 다음 과 같은 몇 가지 가 있 습 니 다. Nginx 설정 을 GitHub 에 전송 하면 Jenkins 는 자동 으로 배 치 를 실행 하고 대상 서버 의 Nginx 설정 이 자동 으로 적 용 됩 니 다.이 과정 은 멱 등 (idempotent) 입 니 다. 코드 가 변 하지 않 으 면 몇 번 을 실행 합 니까? 최종 효 과 는 변 하지 않 습 니 다.대상 기기 에 Nginx 가 설치 되 어 있 지 않 으 면 자동 으로 Nginx 가 설 치 됩 니 다.서버 방화벽 규칙 을 자동 으로 설정 합 니 다.1. 실험 환경 은 이번 실험 에서 Docker Compose 를 이용 하여 Jenkins 와 Jenkins 에이 전 트 를 구축 하 는 것 을 소개 한다.Nginx 를 배치 하기 위해 Vagrant 를 사용 하여 가상 컴퓨터 를 시작 합 니 다.Vagrant 를 사용 하 는 것 은 선택 할 수 있 습 니 다. 독자 들 은 VirtualBox 를 사용 하여 가상 컴퓨터 를 시작 할 수 있 습 니 다.Vagrant 를 사용 하 는 것 은 완전히 자동 화 를 위해 실험 환경 을 구축 하 는 것 이다.다음은 전체 실험 환경의 구조 도 이다. 
그림 의 5123 80 은 호스트 의 5123 포트 를 가상 컴퓨터 의 80 포트 로 전송 하 는 것 을 의미 합 니 다.Vagrant: 가상 컴퓨터 관리 도 구 를 통 해 우 리 는 텍스트 를 사용 하여 가상 컴퓨터 를 정의 하고 관리 할 수 있 습 니 다.Ansible: 자동화 운영 도구 Docker Compose: 다 중 용 기 를 정의 하고 실행 하 는 데 사 용 됩 니 다. Docker 응용 프로그램의 도구.YAML 파일 을 사용 하여 프로그램의 서 비 스 를 설정 할 수 있 습 니 다.2. 실험 환경 복제 코드 를 시작 하고 폴 더 에 들 어가 기
git clone https://github.com/zacker330/jenkins-ansible-nginx.git
cd jenkins-ansible-nginx

Jenkins 에이전트 의 미 러 를 구축 하려 면 Jenkins 에이전트 미 러 를 사용자 정의 해 야 하 는 두 가지 이유 가 있 습 니 다.
docker build -f JenkinsSlaveAnsibleDockerfile -t jenkins-swarm-ansible .

이번 실험 에 서 는 Swarm 플러그 인 을 사용 하여 Jenkins master 와 에이전트 간 의 통신 을 실현 하기 때문에 Jenkins 에이전트 는 swarm 클 라 이언 트 를 시작 해 야 합 니 다.Jenkins agent 는 Ansible 을 지원 해 야 합 니 다.Jenkins master 및 Jenkins 에이전트 시작
docker-compose up -d

통과 하 다. http://localhost:8080 Jenkins master 를 방문 하면 '잠 금 해제 비밀번호' 페이지 가 나타 나 면 다음 그림 에서 명령 을 실행 합 니 다. docker - compose logs jenkins 는 Jenkins master 시작 로 그 를 봅 니 다.로그 의 잠 금 해제 암 호 를 폼 에 입력 하 십시오.그리고 한 걸음 한 걸음 힌트 에 따라 설치 하면 됩 니 다. 
Jenkins 플러그 인 을 설치 하려 면 이번 실험 에 다음 플러그 인 을 설치 해 야 합 니 다: Pipeline 2.6:https://plugins.jenkins.io/workflow-aggregator Swarm 3.15:https://plugins.jenkins.io/swarm Jenkins master 와 Jenkins 에이전트 가 Git 3.9.3 을 자동 으로 연결 하 는 데 사용 합 니 다.https://plugins.jenkins.io/git Jenkins master 가 작업 을 수행 하지 않 고 페이지 로 들 어 갈 것 을 설정 합 니 다:http://localhost:8080/computer/(master) / configure, 다음 그림 과 같은 설정: 
Jenkins 보안 설정 에 열 린 포트 가 있 는 지 확인 하여 Jenkins 에이전트 가 연결 할 수 있 도록 합 니 다.저 희 는 Jenkins master 가 열 린 포트 를 설정 합 니 다. 포트 는 고정된 50000 일 수도 있 고 무 작위 로 설정 할 수도 있 습 니 다.링크 설정:http://localhost:8080/configureSecurity/。  
대상 기 계 를 시작 합 니 다. 명령 줄 에 Nginx 를 배치 하여 다음 명령 을 수행 합 니 다.
vagrant up

Vagrantfile 파일 의 config. vm. box 값 을 vagrant box 로 바 꿔 야 합 니 다.이로써 실험 환경 은 이미 다 세 워 졌 다.이제 젠 킨 스 미 션 을 새로 만 들 수 있 습 니 다.3. Jenkins 에 배치 퀘 스 트 생 성 1. 새 파이프라인 퀘 스 트   
2. 파이프라인 설정 Jenkins 퀘 스 트 를 원 격 창고 에서 Jenkinsfile 을 끌 어 옵 니 다. 다음 그림 과 같 습 니 다. 
그 외 에 다른 설정 은 필요 없습니다. 간단 하지 않 습 니까?4. 수 동 으로 자동화 구축 을 터치 하여 "즉시 구축" 을 클릭 합 니 다. 
최종 실행 로 그 는 다음 과 같 습 니 다: 
이로써 배 치 는 이미 끝났다.이후 Nginx 설정 을 수정 하려 면 코드 만 수정 한 뒤 원 격 창고 로 보 내 면 자동 배치 된다.대상 기계 에 손 으로 로그 인하 여 수정 할 필요 가 없습니다.마지막 으로 우 리 는 방문 을 통 해 http://localhost:5123다음 페이지 가 나타 나 면 배치 성공 을 설명 합 니 다. 
5. 코드 설명 상기 절 차 는 자동화 배치 가 진정 으로 무엇 을 했 는 지 알 수 없다.그것 은 우리 의 모든 논리 가 코드 에 쓰 여 있 기 때문이다.네, everything is code 라 고 할 수 있 습 니 다.다음은 코드 창 고 를 소개 하 겠 습 니 다.
% tree -L 2
├── JenkinsSlaveAnsibleDockerfile # Jenkins agent    Dockerfile
├── Jenkinsfile  #      
├── README.md
├── Vagrantfile # Vagrant        
├── docker-compose.yml # Jenkins     
├── env-conf #       
│   └── dev   # dev      
├── deploy  # Ansible          
│   ├── playbook.yaml
│   └── roles
└── swarm-client.sh # Jenkins swarm       

5.1 유수 선 논리 Jenkinsfile 파일 은 전체 유수 선의 논 리 를 묘사 하 는 데 사용 된다.코드 는 다음 과 같 습 니 다: 
pipeline{
//         ansible     agent  
agent { label "ansible"}
environment{
 //    Ansible     HOST_KEY
ANSIBLE_HOST_KEY_CHECKING = false
}
triggers {
 pollSCM('H/1 * * * *')
}
stages{
stage("deploy nginx"){
  steps{
    sh "ansible-playbook -i env-conf/dev  deploy/playbook.yaml"
  }
     

}}}
environment   :                 。
triggers   :            。pollSCM                  ,             。
agent   :              。
stages   :        ,        。
               ,            deploy nginx   ,         ansible-playbook   。                   。

5.2     

       ,   Nginx      、         ,    Ansible    。  Ansible      ,            Ansible    。
           deploy/playbook.yaml,    :
---
- hosts: "nginx"
become: true
roles:
# Nginx    
- ansible-role-nginx
#        
- ansible-role-firewall

hosts: 플레이 북 배치 대상 호스트 그룹 이름 을 nginx 로 정의 합 니 다.roles: 구체 적 인 배치 동작 을 수행 하 는 두 개의 role 을 포함 하고 role 내부 논리 에 대해 본 논문 의 토론 범위 에 있 지 않 고 관심 이 있 는 학생 들 이 소스 코드 를 읽 습 니 다.5.3 배치 관리 가 배치 에 대해 이야기 하면 배치 관 리 를 이야기 할 수 밖 에 없다.앞의 흐름 선 에서 실 행 된 셸 명령 을 되 돌아 봅 니 다: ansible - playbook - i env - conf / dev deploy / playbook. yaml 우 리 는 - i 매개 변 수 를 통 해 배 치 를 지정 할 때 사용 하 는 환경 설정 을 지정 합 니 다.이러한 방식 을 통 해 환경 설정 과 실행 스 크 립 트 의 분 리 를 실현 합 니 다.이렇게 하면 다음 과 같은 몇 가지 장점 을 가 져 옵 니 다. 환경 을 새로 만 들 때 기 존의 환경 을 복사 한 다음 에 안의 변수의 값 을 새로운 환경 으로 바 꾸 면 됩 니 다.예 를 들 어 테스트 환경 을 배치 하려 면 - i 인삼 수 치 를 env - conf / test 로 바 꿔 야 합 니 다.설정 버 전 화 를 제어 합 니 다.이번 실험 에서 각 환경의 설정 은 env - conf 디 렉 터 리 에 놓 여 있 습 니 다. 현재 dev 환경 만 있 습 니 다. 다음은 env - conf / 디 렉 터 리 구조 입 니 다.
% cd env-conf/
% tree
└── dev
├── group_vars
│   └── nginx.yaml
├── host_vars
│   └── 192.168.52.10
└── hosts
hosts  :Ansible    “  ”         。hosts       :
[nginx]
192.168.52.10

host_vars 디 렉 터 리: 호스트 등급 의 설정 변 수 를 저장 하 는 데 사 용 됩 니 다. 이 예 에서 192.168.5.10 은 YAML 형식 파일 입 니 다.파일 이름 이 호스트 의 IP 임 을 주의 하 십시오.Ansible 이 호스트 에 연결 할 때 사용 하 는 사용자 이름과 비밀번호 와 같은 호스트 와 관련 된 설정 을 파일 에 넣 습 니 다.group_vars 디 렉 터 리: 그룹 급 설정 변 수 를 저장 합 니 다.예 를 들 어 nginx. yaml 에 대응 하 는 것 은 바로   
nginx
이 그룹의 설정 변수 입 니 다.파일 이름과 hosts 의 그룹 이름 이 대응 하 는 것 을 요약 하면 완전한 자동화 배치 가 완료 되 었 습 니 다.그러나 일부 문 제 를 남 겼 다. 본 고 는 '빈' Nginx 만 설 치 했 을 뿐 Nginx 의 진정한 설정 을 소개 하지 않 았 다.현재 호스트 의 연결 정보 (SSH 비밀번호) 는 host_vars/192.168.52.10 파일 에 명시 되 어 있어 보안 위험 이 존재 합 니 다.자바 애플 리 케 이 션 을 사용 할 때 Nginx 설정 을 자동 으로 업데이트 하 는 방법 을 소개 하지 않 았 습 니 다.본 고 는 Jenkins + Ansible 을 사용 하여 자동화 배 치 를 실현 하 는 입문 글 로 필 자 는 독자 의 피드백 에 따라 속편 을 쓸 지 여 부 를 결정 할 것 이다.본 논문 에서 말 하 는 젠 킨 스 라인 의 논리 적 부분 이 부족 하 다 고 생각한다 면 최근 에 출판 된 '젠 킨 스 2. x 실천 지침' 을 살 펴 보 자.아래 그림 을 길 게 눌 러 스 캔 구 매 하 세 요.위 챗 공식 번호 jenkins

좋은 웹페이지 즐겨찾기