柚子快報(bào)激活碼778899分享:運(yùn)維 jenkins搭建與部署
柚子快報(bào)激活碼778899分享:運(yùn)維 jenkins搭建與部署
參考博客:https://blog.csdn.net/m0_58943936/article/details/135368557 Jenkins官網(wǎng):https://jenkins.io/ 或 https://www.jenkins.io/zh/download/ Jenkins官網(wǎng)文檔:https://www.jenkins.io/zh/doc/ jenkins安裝包:http://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/ jenkins插件庫: https://plugins.jenkins.io/ 清華鏡像:http://updates.jenkins-ci.org/download/war/ jdk下載地址:https://www.oracle.com/java/technologies/downloads/#java8 maven下載地址:https://maven.apache.org/download.cgi
一、環(huán)境準(zhǔn)備
1、jdk安裝(安裝jdk8和jdk11,如果需要部署的項(xiàng)目都是jdk11寫的可不安裝jdk8)
1.1、安裝配置jdk
# 查詢系統(tǒng)是否已安裝jdk并卸載
rpm -qa|grep java
# 如果查詢沒有已安裝則進(jìn)行下一步操作, 如果有已安裝Jdk則卸載已安裝的jdk
rpm -e --nodeps java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64
# 驗(yàn)證是否已經(jīng)卸載
rpm -qa|grep java
# 再次查看Java版本,沒有任何信息就表示刪除成功了
java -version
javac -version
1.2 安裝jdk
# 創(chuàng)建jdk存放文件夾 將jdk文件上傳到該文件夾
mkdir /usr/local/Jdk
# 解壓 修改解壓后的文件夾名為java8和java11
tar -zxvf /usr/local/Jdk/jdk-8u411-linux-x64.tar.gz
tar -zxvf /usr/local/Jdk/jdk-11.0.23_linux-x64_bin.tar.gz
# 配置JDK環(huán)境變量,編輯 /etc/profile 文件
vi /etc/profile
# 先將光標(biāo)(可以使用快捷鍵Shift+g)移到最后一行,然后輸入 i 進(jìn)入編輯狀態(tài),粘貼如下內(nèi)容,輸入Esc 進(jìn)入命令模式 輸入:wq 保存修改信息
export JAVA_HOME=/usr/local/Jdk/java8
export PATH=$JAVA_HOME/bin:$PATH
# 配置文件生效
source /etc/profile
# 測(cè)試 JDK 安裝
java -version
javac -version
2、maven安裝
2.1、安裝maven
# 將maven文件上傳到/usr/local
# 解壓 修改文件夾名為maven
tar -zxvf /usr/software/apache-maven-3.9.6-bin.tar.gz
# 配置Maven環(huán)境變量
vi /etc/profile
# 先將光標(biāo)(可以使用快捷鍵Shift+g)移到最后一行,然后輸入 i 進(jìn)入編輯狀態(tài),在JAVA_HOME后面粘貼如下內(nèi)容
export MAVEN_HOME=/home/soft/maven/apache-maven-3.9.6
# 修改PATH為
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
# 配置文件生效
source /etc/profile
# 測(cè)試maven安裝
mvn -version
2.2、配置本地倉庫
# 在maven文件夾中創(chuàng)建maven-repository用于當(dāng)本地倉庫
mkdir -p /usr/local/maven/maven-repository
# 切換目錄
cd /usr/local/maven/maven-repository/conf
# 編輯settings.xml配置文件
vim settings.xml
# 在其中增加如下配置,配置本地倉庫地址:
# 配置阿里云的私服(選做),提高依賴下載速度
3、git安裝
# 服務(wù)器安裝git
yum -y install git
# 查看git路徑
which git
二、jenkins安裝
1、官網(wǎng)下載(下載最新版即可)
2、上傳服務(wù)器
# 進(jìn)入war包存放位置,啟動(dòng)jenkins
nohup /usr/local/Jdk/java11/bin/java -jar -server -Xms1024m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m jenkins.war --httpPort=16060 &
# 開放端口
firewall_cmd --permanent --zone=public --add-port=16060/tcp
# 更新防火墻規(guī)則
firewall-cmd --reload
# 查看端口開啟信息
firewall-cmd --list-ports
3、瀏覽器打開http://你的服務(wù)器ip:16060/
# 查看初始化密碼(復(fù)制后填寫到頁面的管理員密碼中)
cat /root/.jenkins/secrets/initialAdminPassword
4、安裝推薦的插件
5、輸入用戶名密碼郵箱
6、配置訪問地址(默認(rèn)即可,也可按需更改)
7、點(diǎn)擊開始使用jenkins 就可以使用jenkins了
三、jenkins配置
1、所需插件
Git Parameter git參數(shù)Localization: Chinese (Simplified) 簡(jiǎn)體中文包SSH server ssh服務(wù)器Build With Parameters 輸入框式的參數(shù)(可選)Persistent Parameter 下拉框式的參數(shù)(可選)SSH ssh配置Publish Over SSH 通過SSH發(fā)送構(gòu)建好的jar包或war包Role-based Authorization Strategy (可選用戶權(quán)限)
2、配置國內(nèi)清華鏡像源
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
3、插件安裝方法
4、配置maven
位置:系統(tǒng)管理-全局工具配置-maven配置 MAVEN_HOME替換為服務(wù)器maven所在路徑
5、配置jdk (JAVA_HOME替換為服務(wù)器jdk所在路徑)
6、配置git
7、配置憑據(jù)(git賬號(hào))
入口點(diǎn)擊System進(jìn)入全局憑據(jù)進(jìn)入System后,(如果沒有,自行創(chuàng)建一個(gè))進(jìn)入后點(diǎn)擊添加添加憑據(jù) 綁定gitee Api 令牌(令牌按獲取地址從自己的gitee上生成)
8、Jenkins 端配置Gitee API Token, 證書令牌選擇上一步配置的API令牌,測(cè)試鏈接成功則配置完成
9、配置Publish over SSH(用于不同服務(wù)器間發(fā)送文件)
查看公鑰/私鑰,.ssh 文件夾是用于存儲(chǔ)用戶的 SSH 配置和身份驗(yàn)證信息的目錄進(jìn)入/root/.ssh目錄,看看里面有沒有公鑰和私鑰,如沒有
# 創(chuàng)建ssh key
ssh-keygen -t rsa
# 一路回車
# 查看/root/.ssh/文件夾目錄
cd /root/.ssh/
# 查看ssh key 私鑰/公鑰
cat /root/.ssh/id_rsa
cat /root/.ssh/id_rsa_pub
添加映射關(guān)系,我使用的是本機(jī)映射,也可以添加其他服務(wù)器的映射
vim /etc/hosts
# 添加映射
ip 映射名
將另一個(gè)服務(wù)器的公鑰復(fù)制到/root/.ssh/authorized_keys文件中
vim /root/.ssh/authorized_keys
# 測(cè)試鏈接 首次需要輸入密碼,然后在/root/.ssh下生成known_hosts文件,后面測(cè)試鏈接不需要輸入密碼就成功鏈接則成功
ssh root@local-server
10、配置SSH Server
四、項(xiàng)目構(gòu)建
1、在項(xiàng)目根目錄下創(chuàng)建test.Jenkinsfile 文件
jenkins管道文件
pipeline {
agent any
// 參數(shù)
environment {
jarDirect='/home/test'
jarName='test.jar'
projectName='test'
}
stages {
// 構(gòu)建
stage('Build') {
steps {
// 運(yùn)行maven打包指令
sh "mvn -Dmaven.test.failure.ignore=true clean package"
// To run Maven on a Windows agent, use
// bat "mvn -Dmaven.test.failure.ignore=true clean package"
}
}
// 推送jar包
stage('Jar Move') {
steps {
// 運(yùn)行程序關(guān)閉腳本
sh '/home/test/run.sh stop'
// 刪除指定服務(wù)器指定目錄下程序
sh 'ssh local-server rm -rf ${jarDirect}/${jarName}'
// 推送程序到指定服務(wù)器指定目錄下
sh 'scp -r ${WORKSPACE}/test/target/${jarName} local-server:${jarDirect}/${jarName}'
}
}
// 啟動(dòng)程序
stage('Deploy') {
steps {
// 啟動(dòng)指定服務(wù)器下的程序
sh 'ssh local-server "cd ${jarDirect} && sh run.sh start"'
}
}
stage('Test') {
steps {
echo 'Testing'
}
}
}
// 推送消息
post {
success {
echo '部署成功'
}
failure {
echo '部署失敗'
}
}
}
程序啟動(dòng)文件 run.sh
#!/bin/sh
# ./run.sh start 啟動(dòng) stop 停止 restart 重啟 status 狀態(tài)
AppName=test.jar
JavaHome=/usr/local/jdk1.8.0_411/bin
# JVM參數(shù)
JVM_OPTS="-Dname=$AppName -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"
APP_HOME=`pwd`
LOG_PATH=$APP_HOME/logs/$AppName.log
if [ "$1" = "" ];
then
echo -e "\033[0;31m 未輸入操作名 \033[0m \033[0;34m {start|stop|restart|status} \033[0m"
exit 1
fi
if [ "$AppName" = "" ];
then
echo -e "\033[0;31m 未輸入應(yīng)用名 \033[0m"
exit 1
fi
function start()
{
PID=`ps -ef |grep $JavaHome/java|grep $AppName|grep -v grep|awk '{print $2}'`
if [ x"$PID" != x"" ]; then
echo "$AppName is running..."
else
nohup $JavaHome/java $JVM_OPTS -jar $AppName > logging.log 2>&1 &
echo "Start $AppName success..."
fi
}
function stop()
{
echo "Stop $AppName"
PID=""
query(){
PID=`ps -ef |grep $JavaHome/java|grep $AppName|grep -v grep|awk '{print $2}'`
}
query
if [ x"$PID" != x"" ]; then
kill -TERM $PID
echo "$AppName (pid:$PID) exiting..."
while [ x"$PID" != x"" ]
do
sleep 1
query
done
echo "$AppName exited."
else
echo "$AppName already stopped."
fi
}
function restart()
{
stop
sleep 2
start
}
function status()
{
PID=`ps -ef |grep $JavaHome/java|grep $AppName|grep -v grep|wc -l`
if [ $PID != 0 ];then
echo "$AppName is running..."
else
echo "$AppName is not running..."
fi
}
case $1 in
start)
start;;
stop)
stop;;
restart)
restart;;
status)
status;;
*)
esac
2、新建任務(wù)
3、配置
切換分支 配置流水線
4、開始構(gòu)建
五、配置jenkins開機(jī)自啟
1、jenkins啟動(dòng)腳本
#gedit /etc/init.d/myservice
#!/bin/bash
# chkconfig: 2345 10 90
# description: jenkins ....
JENKINS_HOME="/usr/local/jenkins"
JENKINS_WAR="/usr/local/jenkins/jenkins.war"
JENKINS_PORT=16060
JAVA_HOME="/java/jdk-11.0.5/bin"
AppName="jenkins.war"
# JVM參數(shù)
JVM_OPTS="-server -Xms1024m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m"
APP_HOME=`pwd`
LOG_PATH=$JENKINS_HOME/jenkins.log
if [ "$1" = "" ];
then
echo -e "\033[0;31m 未輸入操作名 \033[0m \033[0;34m {start|stop|restart|status} \033[0m"
exit 1
fi
if [ "$AppName" = "" ];
then
echo -e "\033[0;31m 未輸入應(yīng)用名 \033[0m"
exit 1
fi
function start()
{
PID=`ps -ef |grep $JAVA_HOME/java|grep $AppName|grep -v grep|awk '{print $2}'`
if [ x"$PID" != x"" ]; then
echo "$AppName is running..."
else
nohup $JAVA_HOME/java $JVM_OPTS -jar $JENKINS_WAR --httpPort=$JENKINS_PORT > $LOG_PATH 2>&1 &
echo "Start $AppName success..."
fi
}
function stop()
{
echo "Stop $AppName"
PID=""
query(){
PID=`ps -ef |grep $JAVA_HOME/java|grep $AppName|grep -v grep|awk '{print $2}'`
}
query
if [ x"$PID" != x"" ]; then
kill -TERM $PID
echo "$AppName (pid:$PID) exiting..."
while [ x"$PID" != x"" ]
do
sleep 1
query
done
echo "$AppName exited."
else
echo "$AppName already stopped."
fi
}
function restart()
{
stop
sleep 2
start
}
function status()
{
PID=`ps -ef |grep $JAVA_HOME/java|grep $AppName|grep -v grep|wc -l`
if [ $PID != 0 ];then
echo "$AppName is running..."
else
echo "$AppName is not running..."
fi
}
case $1 in
start)
start;;
stop)
stop;;
restart)
restart;;
status)
status;;
*)
esac
2、有三種方式
systemd 設(shè)置開機(jī)自啟
# 創(chuàng)建systemd文件,輸入以下配置
vim /etc/systemd/system/jenkins.service
# 更新配置后需要刷新
systemctl daemon-reload
# 查看打印詳細(xì)日志
journalctl -u jenkins.service -xe
[Unit]
Description=Nexus Service
After=network.target
[Service]
User=root
Type=forking
TimeoutStopSec=20
Restart=always
RestartSec=5s
ExecStart=/usr/local/jenkins/jenkins_start.sh start
ExecStop=/usr/local/jenkins/jenkins_start.sh stop
[Install]
WantedBy=multi-user.target
刷新配置后設(shè)置開機(jī)自啟
# 開機(jī)自啟
systemctl enable jenkins.service
# 關(guān)閉開機(jī)自啟
systemctl disable jenkins.service
# 查看開機(jī)自啟的服務(wù)
systemctl list-unit-files --type=service --state=enabled | grep enabled
# 啟動(dòng)服務(wù)
systemctl start jenkins.service
# 關(guān)閉服務(wù)
systemctl stop jenkins.service
# 查看狀態(tài)
systemctl status jenkins.service
定時(shí)任務(wù)設(shè)置開機(jī)自啟
# 打開定時(shí)任務(wù)編輯
crontab -e
# 添加啟動(dòng)腳本
@reboot /usr/local/jenkins/jenkins_start.sh start
# 重啟系統(tǒng)就會(huì)發(fā)現(xiàn)jenkins已經(jīng)可以開機(jī)自啟了
使用chkconfig自啟動(dòng)
# 查看自啟動(dòng)服務(wù)
chkconfig --list
# 創(chuàng)建啟動(dòng)腳本,啟動(dòng)腳本使用上面提供的
vim /etc/init.d/jenkins_start.sh
# 對(duì)腳本進(jìn)行賦權(quán)
chmod +x /etc/init.d/jenkins_start.sh
# 將腳本添加進(jìn)清單
chkconfig --add jenkins_start.sh
# 添加完畢后查看清單
chkconfig --list
# 至此,完成了Jenkins隨操作系統(tǒng)啟動(dòng)自啟服務(wù)的操作,
# 也可以使用service jenkins_start.sh start/stop/restart命令來重啟服務(wù)。
# 我完成后重啟系統(tǒng)后未能自啟動(dòng),但可以使用指令來啟動(dòng)服務(wù)
柚子快報(bào)激活碼778899分享:運(yùn)維 jenkins搭建與部署
好文閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。