젠킨스 파이프라인 사용법 / 예시 / 예제 / example /
jenkins pipeline 예시
- git plugin / ssh-agent plugin 이 필요하다.
ssh -f
를 사용해야 한다. 그렇지 않으면 java application 을 실행하고, agent 가 return 을 하지 못하고 계속 떠있게 된다.- 아래 pipeline 은 대략적으로 다음과 같은 일을 한다.
- git checkout / ssh credential (참고로 이를 위해서, public/private key 를 만들어서 이 키를 git site 에 deploy key 를 추가하고, jenkins 에도 git credential 을 추가한다.)
- gradle clean assemble
- sshagent 를 이용해서 remote server 로 file 전송
- remote server 에서 kill / java 실행
// ref: https://www.jenkins.io/doc/book/pipeline/
pipeline {
agent any
environment {
DEPLOY_HOST = 'my.host.co.kr'
DEPLOY_HOST_DIR = '/home/myuser/apiserver'
}
stages {
stage('Build') {
steps {
// Get some code from a GitHub repository
// ref: https://www.jenkins.io/doc/pipeline/steps/git/
checkout scmGit(
branches: [[name: '*/master']],
userRemoteConfigs: [[
credentialsId: 'my-git-id',
url: 'https://mygitrepo.com/myrepo_url']])
// Run gradle on a Unix agent.
sh "chmod +x ./gradlew"
sh "cd \$WORKSPACE && ./gradlew -PbuildProfile=prod clean assemble"
}
}
stage('Deploy') {
steps {
sh """#!/bin/bash
echo ${env.DEPLOY_HOST}
"""
// https://plugins.jenkins.io/ssh-agent/
sshagent(credentials: ['my-credential']) {
//
// `pidMyApp` variable :
// ps aux --sort=-pid | grep "[M]yApp" | grep -v zsh | sed -n '1p' | awk '{print $2}'
//
sh """#!/bin/bash
echo ${env.DEPLOY_HOST}
cd \$WORKSPACE/build/libs/
jarfilename=\$(ls -t *.jar | head -n 1)
filenameNoExt=\${jarfilename%.*}
newJarFilename=\$filenameNoExt-\$(date +%Y%m%d.%H%M%S).jar
echo \$newJarFilename
# --------
# send to the remote server
# --------
scp -oStrictHostKeyChecking=no \$jarfilename ${env.DEPLOY_HOST}:${env.DEPLOY_HOST_DIR}/\$newJarFilename
# --------
# run command in the remote-server
#
# -f option:
# https://stackoverflow.com/questions/19996089/use-ssh-to-start-a-background-process-on-a-remote-server-and-exit-session/22364328#22364328
# '\$var' : varialbe of this script
# '\\\$var' : variable of the script for the remote-server
# --------
ssh -f -oStrictHostKeyChecking=no ${env.DEPLOY_HOST} \"
echo \"remote-server actions\"
pwd
pidMyApp=\\\$(ps aux --sort=-pid | grep \\\"[M]yApp\\\" | grep -v zsh | sed -n '1p' | awk '{print \\\$2}')
# --------
# restart
# --------
sudo kill \\\$pidMyApp
sudo nohup java -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true -jar ${env.DEPLOY_HOST_DIR}/\$newJarFilename --spring.profiles.active=prod &
\"
"""
}
}
post {
success {
sh "echo SUCCESS"
}
}
}
}
}
jenkins directory
$JENKINS_HOME/workspace
: build 나 build 에 필요한 파일등을 설치 하는 것들은 이곳에서 작업하게 된다.$JENKINS_HOME/jobs
See Also
- Pipeline NPM Integration | Jenkins plugin : npm build 를 위한 plugin, 이 plugin 은 단순히 node 설정을 사용할 수 있게 해주는 역할인듯 하다. 실제적으로 jenkins 서버에 node는 따로 설치를 해야 하는 듯 하다.(불확실)
- 쿠...sal: [컴] github 는 어떻게 ssh:// 를 지원할까?
댓글 없음:
댓글 쓰기