CICD - Jenkins Pipeline简介和使用 【三】
网络拓扑

版本
【Jenkins-Agent】
IP:192.168.40.146
JDK;1.8
Jenkins-agent部署
准备另一台服务、装上JDK8
https://www.oracle.com/java/technologies/downloads/#license-lightbox
#jdk-11.0.19_linux-x64_bin.tar.gz
#安装在:/usr/local/java/bin/java
#因为部署agent检查这个路劲 所以将java11配置到这个路径
#保持和jenkins master一样的目录
mkdir -p /var/lib/jenkins
mkdir /usr/local/java -p
tar -zxvf jdk-11.0.19_linux-x64_bin.tar.gz -C /usr/local/java/
cd /usr/local/java/
cd jdk-11.0.19/
mv * ../
cd ..
ll
rm jdk-11.0.19/
rm -rf jdk-11.0.19/
[root@jenkins jdk-11.0.19]# vim /etc/profile
#JAVA PARAMETERS
#export JAVA_HOME=/usr/local/src/jdk1.8.0_281
export JAVA_HOME=/usr/local/java
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tool.jar
[root@jenkins jdk-11.0.19]# source /etc/profile
[root@jenkins jdk-11.0.19]# java --version
[root@jenkinsagent Java]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.40.146 netmask 255.255.255.0 broadcast 192.168.40.255
inet6 fe80::e09c:250d:dac8:692e prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:92:98:3f txqueuelen 1000 (Ethernet)
RX packets 122984 bytes 176474774 (168.2 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 10844 bytes 928702 (906.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@jenkinsagent Java]# java --version
java 11.0.19 2023-04-18 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.19+9-LTS-224)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.19+9-LTS-224, mixed mode)
[root@jenkinsagent Java]#
===如果不指定位置会报错控制台===
#检查以下路劲:
#bash: /var/lib/jenkins/jdk/bin/java: No such file or directory
#bash: java: command not found
#bash: /usr/java/latest/bin/java: No such file or directory
#bash: /usr/bin/java: No such file or directory
#bash: /usr/local/bin/java: Too many levels of symbolic links
#bash: /usr/java/default/bin/java: No such file or directory
Checking Java version in the PATH
bash: java: command not found
Java is not in the PATH nor configured with the javaPath setting, Jenkins will try to guess where is Java, this guess will be removed in the future. :Launch agents via SSH
[06/30/23 15:42:43] [SSH] Checking java version of /var/lib/jenkins/jdk/bin/java
Couldn't figure out the Java version of /var/lib/jenkins/jdk/bin/java
bash: /var/lib/jenkins/jdk/bin/java: No such file or directory
[06/30/23 15:42:43] [SSH] Checking java version of java
Couldn't figure out the Java version of java
bash: java: command not found
[06/30/23 15:42:43] [SSH] Checking java version of /usr/bin/java
Couldn't figure out the Java version of /usr/bin/java
bash: /usr/bin/java: No such file or directory
[06/30/23 15:42:43] [SSH] Checking java version of /usr/java/default/bin/java
Couldn't figure out the Java version of /usr/java/default/bin/java
bash: /usr/java/default/bin/java: No such file or directory
[06/30/23 15:42:43] [SSH] Checking java version of /usr/java/latest/bin/java
Couldn't figure out the Java version of /usr/java/latest/bin/java
bash: /usr/java/latest/bin/java: No such file or directory
[06/30/23 15:42:43] [SSH] Checking java version of /usr/local/bin/java
Couldn't figure out the Java version of /usr/local/bin/java
bash: /usr/local/bin/java: No such file or directory
[06/30/23 15:42:43] [SSH] Checking java version of /usr/local/java/bin/java
Couldn't figure out the Java version of /usr/local/java/bin/java
bash: /usr/local/java/bin/java: No such file or directory
===







项目中使用此node并发构建

Pipline代码部署
案例:一:脚本化Pipline部署
创建流水线pipeline

创建基础环境是否可以运行Hello World


通过流水线语法添加代码

简单pipeline代码
node("jenkins-agent"){
stage("clone代码"){
sh "cd /var/lib/jenkins/workspace/birkhoff-pipeline && rm -rf ./*"
git credentialsId: '5f9c9acf-ae80-4f17-85cd-43e79f56eaf3', url: 'git@192.168.40.130:magedu/devops.git'
echo "clone代码"
}
stage("代码构建"){
sh "cd /var/lib/jenkins/workspace/birkhoff-pipeline && tar czvf devops.tar.gz ./*"
echo "代码构建"
}
stage("停止服务"){
sh 'ssh root@192.168.40.130 "/usr/local/tomcat/apache-tomcat-8.5.90/bin/shutdown.sh && rm -rf /usr/local/tomcat/apache-tomcat-8.5.90/webapps/devops/*"'
echo "停止服务"
}
stage("代码copy"){
sh "cd /var/lib/jenkins/workspace/birkhoff-pipeline && scp devops.tar.gz root@192.168.40.130:/usr/local/tomcat/apache-tomcat-8.5.90/webapps"
echo "代码copy"
}
stage("代码部署"){
sh 'ssh root@192.168.40.130 "cd /usr/local/tomcat/apache-tomcat-8.5.90/webapps && rm -rf devops/* && tar xvf devops.tar.gz -C devops/ && rm -rf devops.tar.gz"'
echo "代码部署"
}
stage("启动服务"){
sh 'ssh root@192.168.40.130 "/usr/local/tomcat/apache-tomcat-8.5.90/bin/startup.sh"'
echo "启动服务"
}
}
更新git

立即构建并查看输出

检查Tomcat是否正常部署新代码

案例二、使用Pipeline script from SCM进行部署流水线
[root@K8S-docker devops]# pwd
/root/devops
[root@K8S-docker devops]# cat Jenkinsfile
node("jenkins-agent"){
stage("clone代码"){
sh "cd /var/lib/jenkins/workspace/birkhoff-pipeline && rm -rf ./*"
git credentialsId: '5f9c9acf-ae80-4f17-85cd-43e79f56eaf3', url: 'git@192.168.40.130:magedu/devops.git'
echo "clone代码"
}
stage("代码构建"){
sh "cd /var/lib/jenkins/workspace/birkhoff-pipeline && tar czvf devops.tar.gz ./*"
echo "代码构建"
}
stage("停止服务"){
sh 'ssh root@192.168.40.130 "/usr/local/tomcat/apache-tomcat-8.5.90/bin/shutdown.sh && rm -rf /usr/local/tomcat/apache-tomcat-8.5.90/webapps/devops/*"'
echo "停止服务"
}
stage("代码copy"){
sh "cd /var/lib/jenkins/workspace/birkhoff-pipeline && scp devops.tar.gz root@192.168.40.130:/usr/local/tomcat/apache-tomcat-8.5.90/webapps"
echo "代码copy"
}
stage("代码部署"){
sh 'ssh root@192.168.40.130 "cd /usr/local/tomcat/apache-tomcat-8.5.90/webapps && rm -rf devops/* && tar xvf devops.tar.gz -C devops/ && rm -rf devops.tar.gz"'
echo "代码部署"
}
stage("启动服务"){
sh 'ssh root@192.168.40.130 "/usr/local/tomcat/apache-tomcat-8.5.90/bin/startup.sh"'
echo "启动服务"
}
}
[root@K8S-docker devops]# git add Jenkinsfile ./
[root@K8S-docker devops]# git commit -m "add Jenkinsfile"
[master be2ac31] add Jenkinsfile
1 file changed, 27 insertions(+)
create mode 100644 Jenkinsfile
[root@K8S-docker devops]# git push
warning: push.default is unset; its implicit value is changing in
Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the current behavior after the default changes, use:
git config --global push.default matching
To squelch this message and adopt the new behavior now, use:
git config --global push.default simple
See 'git help config' and search for 'push.default' for further information.
(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode
'current' instead of 'simple' if you sometimes use older versions of Git)
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 745 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.40.130:magedu/devops.git
3e21218..be2ac31 master -> master

案例三、声明式Pipline部署
Jenkinsfile (Declarative Pipeline)
#声明式要写stage下要写steps
pipeline {
agent any
stages {
stage('Example Build') {
steps {
echo 'Hello World'
}
}
stage('Example Deploy') {
when {
branch 'production'
environment name: 'DEPLOY_TO', value: 'production'
}
steps {
echo 'Deploying'
}
}
}
===
pipeline {
agent { label 'jenkins-node1'}
stages{
stage('Example Build') {
steps {
echo 'Hello World'
}
}
}
}
}



浙公网安备 33010602011771号