- 참고로 이전에는 jenkins 서버를 따로두던가 하는 식이었고 지금은 도커로 jenkins를 설치할 계획
# 도커를 사용해 jenkins 구성 및 도커 소켓 공유
docker run -d -p 8080:8080 --name jenkins -v /home/jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -u root jenkins/jenkins:lts
- 여기서
/home/jenkins:/var/jenkins_home
: 노드 /home/jenkins와 컨테이너 /var/jenkins_home이 볼륨 공유하도록 /var/run/docker.sock:/var/run/docker.sock
- -> ★ 도커로 젠킨스를 설치한다고했다
- -> 젠킨스도 내부적으로 또 도커가 필요한데 이를 위해 도커 소캣을 전달하여 이를 공유 :
DooD = docker out of docker
- 도커 -> 젠킨스 -> 도커 ( 도커를 통해 올린 젠킨스가 다시 도커를 컨트롤할 수 있도록 )
- 이를위해 root유저를 제공한 것
-u root
- 그리고 비밀번호 어디 적어놔라
Jenkins에도 docker 클라이언트가 필요하므로 도커를 설치하자.
# jenkins에 docker client 설치
docker exec jenkins apt update
docker exec jenkins apt install -y docker.io
- 여기선 8080포트로 지정했으니
노드IP:8080
- 추천 플러그인으로 설치
- docker pipeline 플러그인 설치
- gogs플러그인도 설치 => 이건 설치 후 재시작버튼 클릭으로 설치
방식 : 이전에 깃허브 코드가 변경되면 자동으로 끌어다가 빌드하는것처럼 똑같이 구성 다만 ★ 여기서는 gogs(깃허브) -> 젠킨스 -> harbor(레지스트리)
- 우선 jenkins를 gogs에 연결하기까지는 완료
- gogs를 jenkins에 연결해야한다
-> 설정
-> webhook
-> gogs
이 후 아래처럼 진행
node {
stage('Clone repository') {
checkout scm
}
stage('Build image') {
app = docker.build("172.30.5.156/admin/flask-example")
}
stage('Push image') {
docker.withRegistry('https://172.30.5.156', 'harbor-cred') {
app.push("${env.BUILD_NUMBER}")
app.push("latest")
}
}
}
stage('Build image') {
app = docker.build("172.30.5.156/admin/flask-example")
}
stage('Push image') {
docker.withRegistry('https://172.30.5.156', 'harbor-cred')
{
app.push("${env.BUILD_NUMBER}")
app.push("latest")
}
}
- jnekins가 harbor에 정보를 보내줄 때 접근을 위한 credential = 5번에서 harbor-cred
- 생성이 필요하다
- jenkins관리 -> management credentials
- 쭉쭉 타고들어가서
그럼 gogs ( 깃허브 )에서 코드를 살짝 변경해보면? gogs 코드 변경 -> jenkins가 끌어와서 CI -> harbor에 새로운 image 업로드