overview.
jenkins를 로컬에서 실행하여 vmware 가상 컴퓨터 centos 에 파일을 cp(복사) 해보았다.
로컬에서 실행하였기 때문에 webHook 는 사용하지 않았습니다.
솔직히 이상한 부분이 한 두개 가 아닙니다. 제가 보려고 작성한 것이니 다른 문서 보는게 더 났습니다.
- docker jenkins 설치
- jenkins 설정
- Permission Denied
- 보내보장~
1. docker jenkins 설치
docker 로 jenkins 를 로컬에 설치를 진행하였습니다. jenkins 는 다음과 같습니다.
처음 로그인 화면시 시작 가이드는 밑과 같이 설정하였습니다.
https://guide.ncloud-docs.com/docs/devtools-devtools-1-2
Jenkins 시작 가이드
guide.ncloud-docs.com
처음 Administrator password 는 /var/lib/jenkins/secrets/initialAdminPassword 파일에 cat 명령어를 사용하여 넣어주세용
그 후 플러그인 설치와 유저 생성을 마친후 http://localhost:8080 (또는 자유) url 를 입력하면 초기화면이 생성됩니다.
2. jenkins 설정
대쉬보드의 젠킨스 관리를 눌러 여러 시스템 설정이 가능합니다. 저는 plugin 으로 publish over ssh 와 github 플러그인을 추가로 깔았네요.
또한 메인 화면에서 새로운 ITEM 버튼을 눌러 새로운 파이프라인을 생성하거나 등등 하실수 있습니다.
파이프라인은 다음과 같이 구성했습니다. 구성은 자유로히!!
특히 Credential 은 젠킨스 관리에서 Credential 부분에 들어가셔서 새로 생성하기로 다음과 같이 구성했습니다.
github 에서 setting - Developer Setting 에서 토큰을 발급받습니다.
문서는 밑과 같습니다. 근데 솔직히 할 필요가 있나 싶음
https://velog.io/@sunblock99/Jenkins-%EC%A0%A0%ED%82%A8%EC%8A%A4-sshkey-%EB%B0%9C%EA%B8%89%EB%B2%95
[Jenkins] 젠킨스 sshkey 발급법(Publish over SSH 설정)
젠킨스에서 Publish over SSH 를 사용하기 위해서는 원격서버에 key등록을 해놔야한다.해당 명령어로 젠킨스 계정으로 접속을해야한다.하지만 명령어를 입력했을때 접속이 안되는 경우가 있다.그럴
velog.io
뭐 sshkey를 발급하고 뭔가를 했어도 저는 permission denied가 뜨더라고요.
다음은 Jenkins 파일입니다. Git 의 루트 폴더에 Jenkinsfile 을 추가합니다.
여러 설정이 가능하기 때문에 다른 문서로 가셔서 확인해보세요!! 저는 나중에 Dockerfile을 구성해서 보내려고 합니다.
pipeline {
agent any
stages {
stage('Checkout') {
steps {
// Git 저장소에서 소스 코드 체크아웃
git url: 'https://github.com/... .git', branch: 'main'
}
}
stage('Modify') {
steps {
// 파일 수정 등의 작업 수행
writeFile file: 'myfile.txt', text: 'Modified content'
}
}
stage('cp file') {
steps {
// 파일을 가상 머신의 로컬 디렉토리로 복사
sh 'scp -r ./myfile.txt centos@192.168.111.100:/home/centos'
}
}
}
post {
success {
// 성공적으로 푸시한 경우 실행되는 작업
echo 'Changes pushed successfully!'
}
failure {
// 푸시 실패 시 실행되는 작업
echo 'Push failed! Please check the logs.'
}
}
}
3. Permission Denied
보냈을때 안되더라고요 엌ㅋㅋㅋ 어차피 파일만 보낼거라 scp 를 사용해보죠
젠킨스 파이프라인에서 비밀번호를 입력하는 것은 일반적으로 권장되지 않습니다. 대신에 SSH 키를 사용하여 인증하는 방법을 권장합니다. SSH 키를 사용하면 비밀번호를 입력하지 않고도 안전하게 인증할 수 있습니다.
SSH 키 생성:
먼저, Jenkins 서버에서 SSH 키를 생성해야 합니다. 다음 명령어를 사용하여 SSH 키를 생성합니다.
ssh-keygen -t rsa
키를 서버로 복사:
생성된 키를 원격 서버로 복사하여 키 기반 인증을 설정합니다.
ssh-copy-id -i ~/.ssh/id_rsa.pub user@192.000.000.000
SSH 구성:
Jenkins 서버에서 사용할 수 있도록 SSH 구성을 설정합니다. Jenkins 가 아닌 보낼 서버에 들어가 ~/.ssh/config 파일을 열고 다음과 같이 추가합니다. (이것도 있어야하나)
Host 192.168.111.100
User centos
이제 Jenkins 파이프라인에서는 비밀번호를 입력하지 않고 SCP 명령을 사용할 수 있습니다.
sh 'scp -r ./myfile.txt 192.168.111.100:/home/centos'
이렇게하면 SSH 키를 사용하여 Jenkins가 원격 서버에 파일을 전송할 수 있습니다. SSH 키를 사용하여 인증하면 보안이 향상되며 비밀번호를 노출시키지 않습니다.
라고 합니다.
4. 결과
솔직히 저것들 중에 안해도 되는게 많은거 같은데 솔까 파일만 보내서 ㅋㅋㅋㅋㅋㅋㅋ
나머지 Jenkins script 는 좀 더 공부를 해서 좋은 파이프라인을 만들 수 있도록!! 해봐야 겠습니다.
그렇게 보내진 파일 들어오긴 하는 구나 ㅠㅠ..
추가적으로 Springboot gradle war 파일을 보내보았습니다.
만약 permission denied 가 떳다면 gradlew 파일의 접근 권한이 없을수도 있으니 chmod 로 접근 권한을 추가 해 줍니다.
유저한테 접근권한 넣어주어도 되고 ㅎㅎ..
-rwxr-xr-x 1 jenkins jenkins 8692 Mar 31 10:32 gradlew
pipeline {
agent any
stages {
stage('Checkout') {
steps {
// Git 저장소에서 소스 코드 체크아웃
git url: 'https://github.com/... .git', branch: 'main'
}
}
stage('Build') {
steps {
// Gradle 빌드 실행
sh 'chmod +x gradlew'
sh './gradlew build'
}
}
stage('Transfer Artifacts') {
steps {
// 빌드된 파일을 원격 서버로 전송
sh 'scp -r ./build/libs/*.war centos@192.000.000.000:/home/centos/build'
}
}
}
post {
success {
// 성공적으로 푸시한 경우 실행되는 작업
echo 'Changes pushed successfully!'
}
failure {
// 푸시 실패 시 실행되는 작업
echo 'Push failed! Please check the logs.'
}
}
}
5. 음..
그래서 좀더 공부는 해야되겠지? ㅋ..
추가적으로 깃 허브 파일을 jenkins가 체크아웃 하게 되는데 이는 밑과 같은 경로에서 확인할 수 있습니다.
/var/jenkins_home 이 jenkins의 유저 폴더더라구요 아닌가? 아님 말구
/var/jenkins_home/workspace/git