서론
이전 글에서 언급했다시피publish over ssh 에서 Exec command 창에 입력하는 bash 명령어는 무엇이든 가능하여,
pipeline 을 대체할 수 있을 정도이다.
많은 사람들이 각자 다른 방식으로 구축을 했다.
누군가는 project 빌드까지 jenkins server 에서 진행, conf 파일과 tar 압축하여 ssh 전송 후 배포 [링크]
누군가는 git pull 받은 소스를 pipeline 설정으로 전부 배포 서버로 ssh 전송 후 빌드, 배포 [링크]
누군가는 publish over ssh 는 아니지만, pipeline 에서 ssh 커맨드를 통해 배포 [링크]
등등 다양한 방법이 있다.
개인적으로는 pipeline 의 역할이 분명하고, 그 바운더리 안에서 관리가 되야한다고 생각하기에,
exec 커맨드를 쓰기보단 pipeline 스크립트로 해결하고 싶다는 생각이 든다. (script 내부에서 sshTransfer 설정)
Publish Over SSH t설정으로 원격서버와 그 접속정보를 추가하는 방법과,
어떻게 pipeline 안에서 이 기능을 활용하는지 한번 살펴보자.
Publish Over SSH - SSH Servers 환경변수 설정
Dashboard > Jenkins 관리 > 시스템 설정
- Name : 환경 변수명(Jenkins 환경 변수)
- Hostname : 원격 서버 IP
- Username : 원격 서버 user 이름
- Remote Directory : 원격서버 작업 디렉토리
SSH 키 이용시
- Passphrase : SSH 암호를 사용하는 경우 암호를 설정
- Path to key : SSH 키를 사용하는 경우 개인키 파일의 경로 설정
- Key : Path to key와 동일, text file로 존재하게 될 경우 이 부분에 입력
프로젝트에 빌드 후 조치 적용
Dashboard > 프로젝트 > 구성 > 빌드 후 조치 항목 추가 > Send build artifacts over SSH
SSH Publishers - SSH Server
Name : 이전에 설정한 SSH Server 환경 변수
Transfers : 원격 서버에 전송할 내용들
- 많은 Transfer Set 설정 가능
- Source files, Remove prefix, Remote directory 미입력 후 Exec command만 입력하여 원격 서버에 스크립트 실행만 할 수도 있음
Source files
- 원격 서버로 보낼 파일의 경로를 설정합니다.
- 프로젝트/작업공간 아래부터 경로를 입력
- ex) deploy-spring-test/target/deploy.war
Remove prefix
- Source files에서 지정한 경로의 하위 폴더를 지우는 기능입니다
- SSH 로 접속/파일 전송 시 source files 에서 제거할 prefix
- ex) deploy-spring-test/target
Remote directory
- Source files가 저장될 원격 서버 폴더 경로
- SSH Server로 지정한 서버의 원격지 폴더경로 이후부터 지정
Exec command
- 파일 전송이 끝난 이후에, 원격 서버에 실행될 스크립트
- ※유의점 : jenkins user로 스크립트를 실행하기 때문에 특정 명령어에 대한 권한 문제가 발생할 수 있음
Publish over SSH 를 활용한 Pipeline 작성
위와 같은 방법으로 ssh 서버를 설정 해놓는다.
그러면 pipeline script 에서 해당 서버를 불러와 필요한 작업을 진행한다.
공식문서에 따르면, build 하기 전의 소스코드를 전송하는 방법과 build 된 결과물을 전송하는 방법이 있다.
stage('SSH transfer') {
script {
sshPublisher(
continueOnError: false, failOnError: true,
publishers: [
sshPublisherDesc(
configName: "${env.SSH_CONFIG_NAME}",
verbose: true,
transfers: [
sshTransfer(
sourceFiles: "${path_to_file}/${file_name}, ${path_to_file}/${file_name}",
removePrefix: "${path_to_file}",
remoteDirectory: "${remote_dir_path}",
execCommand: "run commands after copy?"
)
])
])
}
}
이 중에서 "transfers : [ sshTransfer " 부분은 여러번 쓰일 수 있다.
따라서 exec Command 를 따로 정리하면 보기 좋게 정리할 수 있다.
transfers:[
sshTransfer(
execCommand: "Run commands before copy?"
),
sshTransfer(
sourceFiles:"${path_to_file}/${file_name}, ${path_to_file}/${file_name}",
removePrefix: "${path_to_file}",
remoteDirectory: "${remote_dir_path}",
execCommand: "run commands after copy?"
)
])
출처 : https://dzone.com/articles/intro-to-jenkins-pipeline-and-using-publish-over-s
'개발 > Linux & DevOps' 카테고리의 다른 글
구름 | 장애 대응 특강 노트 정리 (0) | 2022.08.29 |
---|---|
Jenkins 공식문서 후기 (CasC, 디렉터리 구조, 시스템 설정 등) (0) | 2022.04.14 |
docker jenkins CD/CI ① - 각자 역할, 작동 흐름 절차 (0) | 2022.03.21 |
ngrinder & scouter 부하테스트 후기, 통계 해석까지 (0) | 2022.01.27 |
부하 테스트 툴 ngrinder 3.5.5 구축&사용 후기! (0) | 2022.01.05 |