- 項目摘要:
本文基於文檔https://blog.csdn.net/qq_25337221/article/details/106160024和
https://blog.csdn.net/qq_25337221/article/details/106185232編寫。
主要是將一個war包項目發佈到目標服務器,並遠程執行Tomcat。本實例使用之所以未使用springboot,主要是增強一些難度係數,進一步加強jenkins的學習。後續將進一步優化與改進。本實例仍然是入門項目。
這裏一共分三步:
- 將jenkins服務器的公鑰配置到目標服務器,使其可以免密傳輸。
- 在jenkins安裝SSH Pipeline Steps插件。
- 編寫pipline和shell。
- 項目具體實施:
- 將jenkins服務器的公鑰配置到目標服務器
- 在A服務器中生成祕鑰對
#ssh-keygen -t rsa -P ""
# scp /root/.ssh/id_rsa.pub root@target ip:/root
- 登錄B服務器,將剛纔拷貝的公鑰文件內容寫入到B服務器的.ssh目錄下的authorized_keys文件中。
# cat /root/id_rsa.pub >> .ssh/authorized_keys
- 此時,A登錄B或者A向B發送文件將不需要密碼。
- 在jenkins安裝SSH Pipeline Steps插件。
- 新建一個簡單Gradle構建的Servlet項目,並在目標服務器安裝jdk,gradle,tomcat。並配置好相關環境變量。
- 在目標服務器創建/root/demo目錄,並在裏面新建start.sh腳本用於部署項目與啓動Tomcat,並賦予chmod a+x start.sh 可執行權限。腳本內容如下:
#!/bin/bash
pid=$(ps -ef | grep 8080 | grep -v grep | awk '{print $2}')
if [ -n "$pid" ]; then
echo $pid
/usr/local/apache-tomcat/bin/shutdown.sh
fi
rm -rf /usr/local/apache-tomcat/demo*
cp -rf /root/demo/demo.war /usr/local/apache-tomcat/webapps
/usr/local/apache-tomcat/bin/startup.sh
- 在jenkins新建一個pipline任務,名稱爲remote-demo-pipline。在jenkins服務器安裝gradle,並且在jenkins配置gradle。
在流水線編寫如下腳本:
def getHost(){
def remote = [:]
remote.name = 'targetServer'
remote.host = 'targetIPAddress'
remote.user = 'root'
remote.port = 22
remote.password = 'targetPassword'
remote.allowAnyHosts = true
return remote
}
pipeline{
agent any
tools {
gradle 'gradle6.0.1'
jdk 'jdk1.8'
}
environment{
TASK_NAME="remote-demo-pipline"
PROJECT="demo.war"
PROJECT_NAME="demo"
}
options{
buildDiscarder(logRotator(numToKeepStr: '10'))
timestamps()
}
triggers{
pollSCM('H/1 * * * *')
}
stages{
stage('init-server'){
steps {
script {
server = getHost()
}
}
}
stage('Preparation'){
steps{
echo 'pulling code'
/*git code*/
}
}
stage('Build'){
steps{
script{
echo 'Stopping Application'
echo 'starting build'
sh './gradlew clean build -x test'
}
}
}
stage('Deploy'){
steps{
script{
echo 'copy new project'
sh 'scp /var/lib/jenkins/workspace/$TASK_NAME/build/libs/$PROJECT root@targetIP:/root/demo'
echo "starting project"
sshCommand remote: server, command: "/root/demo/start.sh"
echo "startup success!"
}
}
}
}
post {
success {
emailext (
subject: "SUCCESSFUL: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'",
body: """<p>SUCCESSFUL: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]':</p>
<p>Check console output at "<a href="${env.BUILD_URL}">${env.JOB_NAME} [${env.BUILD_NUMBER}]</a>"</p>""",
to: "[email protected],[email protected]",
from: "[email protected]"
)
slackSend channel: "#success-demo", message: "Content Build and Validate Succeded for ${env.CONTENT_GIT_REPO} for Repository ${env.CONTENT_GIT_URL} by ${env.JOB_NAME} (<${env.BUILD_URL}|Open>)", color: 'success', tokenCredentialId: 'slack-token'
}
failure {
emailext (
subject: "FAILED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'",
body: """<p>FAILED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]':</p>
<p>Check console output at "<a href="${env.BUILD_URL}">${env.JOB_NAME} [${env.BUILD_NUMBER}]</a>"</p>""",
to: "[email protected],[email protected]",
from: "[email protected]"
)
slackSend channel: "# failure-jenkins", message: "Content Build and Validate FAILED for ${env.CONTENT_GIT_REPO} for Repository ${env.CONTENT_GIT_URL} by ${env.JOB_NAME} (<${env.BUILD_URL}|Open>)", color: 'warning', tokenCredentialId: 'slack-token'
}
}
}
- 此時基本搭建完成。這裏很明顯有一處是有問題的,就是需要遠程明文密碼,後面將對以上內容進一步改進。但是有可能是基於springboot、springcloud項目。
- 參考鏈接:
- 將jenkins服務器的公鑰配置到目標服務器: https://www.cnblogs.com/youcong/p/10809056.html
2. jenkins 部署項目到遠程服務器: https://blog.csdn.net/catoop/article/details/100511027
本內容由安康學院“雨季”原創。