Jenkins pipeline+Docker SpringBootプロジェクトSSHAgentに配備(+欠落通知)
https://velog.io/@mooh 2 j/jenkins-pipeline-Docker SpringBootプロジェクト-導入
以前のブログではjenkins pipelineを使用してjenkinsをインストールしたインスタンスにjenkinsを配備していました.
今回は,SSHを介してリモートAWS EC 2インスタンスにリモート配備する操作を実施した.
既存のインストールjenkinsインスタンスでdockerイメージを使用してjenkinsを実行します. Jenksn実行ログ
jenkinsのホームページに入り、
以前のブログでjenkinsfileをPipeline>
パイプライン構文を使用した
これは
パイプを作成する順序は次のとおりです. Jenkins例: ssh例: 順番に操作する.
Jenkinsfileはspringprojectの真下にあります.Dockerfileも同じ位置に置くべきです.
画面で、「
失敗した場合は、左下のBuild Historyで詳細ログを表示したり、コンソールoutでログを表示したりできます.
パイプラインが失敗していない場合は、docker hubで画像が更新されていることがわかります.
sshでjenkinsインスタンスからサーバインスタンスに接続してdockerイメージの引き出しと実行を実行するには、まず
jenkinsに
以前と同様、Dashboard->
サーバインスタンスにsshを接続するためにCrementailを登録する必要があります.
この画面は、前の
Kind Dropboxから
IDはサーバインスタンスのユーザ名である(ec 2 ubuntuは
Usernameは、パイプラインコードで識別されるキー値(私は
Private Keyで書くのは
私は狦狦です!
ここでpipeline構文でgenerateの内容を直接jenkinfileに入れればいいです
このように整理されたssh接続pipeline stageは以下のようになります.
docker psコマンドを使用して、sshインスタンスでサービスが実行されていることを確認できます.
その後、
Jenkins pipeline scriptでは、
Jenkinsでは、
https://velog.io/登録
「」を参照してください.
Jenkins pipeline
ソース:https://github.com/mooh2jj/docker-jenkins-pipleline-test.git
https://kanoos-stu.tistory.com/55?category=1024343
https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#string-interpolation
https://www.jenkins.io/doc/book/pipeline/syntax/
https://www.youtube.com/watch?v=gdbA3vR2eDs
以前のブログではjenkins pipelineを使用してjenkinsをインストールしたインスタンスにjenkinsを配備していました.
今回は,SSHを介してリモートAWS EC 2インスタンスにリモート配備する操作を実施した.
jenksnの実行
既存のインストールjenkinsインスタンスでdockerイメージを使用してjenkinsを実行します.
docker run -d -p 8080:8080 --name=jenkinscicd -v /jenkinsDir:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock mooh2jj/myjenkins
チェックdocker logs [jenkins 컨테이너ID]
Jenkins pipelineの設定
jenkinsのホームページに入り、
pipeline
設定を使用してItem
を作成します.以前のブログでjenkinsfileをPipeline>
Pipleline script from SCM
に設定した場合パイプライン構文を使用した
Pipleline script
の作成から開始します.これは
Pipeline Syntax
を使用するためです.Pipeline Syntax
は、SSHまたは他のCredentail
の設定におけるパイプ構文に非常に有用である.パイプを作成する順序は次のとおりです.
git clone -> gradle build -> docker build -> docker push
docker pull -> docker run
Jenkinsfileはspringprojectの真下にあります.Dockerfileも同じ位置に置くべきです.
Jenkins pipeline順序
# 다음과 같은 순서로 동작하는 파이프라인이 완성된다.
1. jenkins인스턴스 git clone
2. jenkins인스턴스 gradle build
3. jenkins인스턴스 docker build
4. jenkins인스턴스 docker push
5. jenkins인스턴스 -> server인스턴스 ssh접속
6. server인스턴스 docker pull
7. server인스턴스 docker run
Jenkinsfilepipeline{
agent any
stages {
stage('Prepare') {
agent any
steps {
git credentialsId: 'git-creds', url: 'https://github.com/mooh2jj/docker-jenkins-pipleline-test.git'
}
post {
success {
echo 'prepare success'
}
always {
echo 'done prepare'
}
cleanup {
echo 'after all other post conditions'
}
}
}
stage('Build Gradle') {
steps{
sh 'chmod +x gradlew'
sh './gradlew clean build'
sh 'ls -al ./build'
}
}
stage('Docker build image'){
steps{
sh 'docker build . -t mooh2jj/docker-jenkins-pipeline-test'
}
}
stage('Docker push image') {
steps {
withCredentials([string(credentialsId: 'docker-pwd', variable: 'dockerHubPwd')]) {
sh "docker login -u mooh2jj -p ${dockerHubPwd}"
}
sh 'docker push mooh2jj/docker-jenkins-pipeline-test'
}
post {
success {
echo 'success'
}
failure {
echo 'failed'
}
}
}
stage('Run Container on SSH Dev Server'){
steps{
echo 'SSH'
sshagent (credentials: ['ubuntu-server']) {
sh "ssh -o StrictHostKeyChecking=no [email protected] 'docker pull mooh2jj/docker-jenkins-pipeline-test'"
sh "ssh -o StrictHostKeyChecking=no [email protected] 'docker ps -q --filter name=docker-jenkins-pipleline | grep -q . && docker rm -f \$(docker ps -aq --filter name=docker-jenkins-pipleline)'"
sh "ssh -o StrictHostKeyChecking=no [email protected] 'docker run -d --name docker-jenkins-pipleline -p 8080:8080 mooh2jj/docker-jenkins-pipeline-test'"
}
}
}
}
}
Jenkins build
画面で、「
Build Now
」をクリックしてjenkins buildを実行します.Stage Viewの進捗状況は、次のように表示されます.失敗した場合は、左下のBuild Historyで詳細ログを表示したり、コンソールoutでログを表示したりできます.
パイプラインが失敗していない場合は、docker hubで画像が更新されていることがわかります.
SSHをEC 2インスタンスに接続する
sshでjenkinsインスタンスからサーバインスタンスに接続してdockerイメージの引き出しと実行を実行するには、まず
jenkinsに
sshagent plugin
をインストールする必要があります.以前と同様、Dashboard->
Jenkins 관리
->플러그인 관리
「ssh agent를 검색
」ボタンと「今すぐチェックしてダウンロードしてインストール」ボタンをクリックし、再起動します.サーバインスタンスにsshを接続するためにCrementailを登録する必要があります.
この画面は、前の
Pipeline Syntax
ウィンドウに入ると、対応する設定に入ることができます.Kind Dropboxから
SSH Username with private key
を選択します.IDはサーバインスタンスのユーザ名である(ec 2 ubuntuは
ubuntu
)Usernameは、パイプラインコードで識別されるキー値(私は
ubuntu-server
と呼ぶ)である.Private Keyで書くのは
私は狦狦です!
-----BEGIN RSA PRIVATE KEY-----
~~~~~ ssh 인스턴스의 pem 파일을 클릭하면 나옵니다
-----END RSA PRIVATE KEY-----
これらの内容をすべて入力し、「Add」をクリックします.ここでpipeline構文でgenerateの内容を直接jenkinfileに入れればいいです
このように整理されたssh接続pipeline stageは以下のようになります.
pipeline {
agent any
stages {
stage('SSH SERVER EC2') {
steps {
echo 'SSH'
sshagent(['credentail 식별 값']) {
sh 'ssh -o StrictHostKeyChecking=no [user name]@[ip address] "whoami"'
sh "ssh -o StrictHostKeyChecking=no [user name]@[ip address] 'docker pull [이미지 이름]:[태그 이름]'"
sh "ssh -o StrictHostKeyChecking=no [user name]@[ip address] 'docker run [이미지 이름]:[태그 이름]'"
}
}
}
}
}
jenkinsパイプが稼働している場合docker psコマンドを使用して、sshインスタンスでサービスが実行されていることを確認できます.
その後、
server인스턴스의 pem 파일내용
に登録され、springfootプロジェクトpipeline script from SCM
に設定されます.Jenkins Snake Notification設定
Jenkins pipeline scriptでは、
Jenkinsfile
を設定できます.Jenkinsでは、
slack Notification
とslack 플러그인
には、次のブログが含まれています.https://velog.io/登録
「」を参照してください.
Jenkins pipeline
### jenkins pipeline stage 추가
stage("Slack Notification") {
steps {
echo 'slack test'
}
post {
success {
slackSend channel: '#프로그래밍', color: 'good', message: "success deploy"
}
failure {
slackSend channel: '#프로그래밍', color: 'danger', message: "failure deploy"
}
}
}
結果リファレンス
ソース:https://github.com/mooh2jj/docker-jenkins-pipleline-test.git
https://kanoos-stu.tistory.com/55?category=1024343
https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#string-interpolation
https://www.jenkins.io/doc/book/pipeline/syntax/
https://www.youtube.com/watch?v=gdbA3vR2eDs
Reference
この問題について(Jenkins pipeline+Docker SpringBootプロジェクトSSHAgentに配備(+欠落通知)), 我々は、より多くの情報をここで見つけました https://velog.io/@mooh2jj/Jenkins-pipeline-Docker-SpringBoot프로젝트-SSH-배포하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol