百姓網(wǎng)租房seo的定義是什么
1. Jenkins 介紹
軟件開發(fā)生命周期(SLDC, Software Development Life Cycle):它集合了計(jì)劃、開發(fā)、測(cè)試、部署的集合。
軟件開發(fā)瀑布模型
軟件的敏捷開發(fā)
1.1 持續(xù)集成
持續(xù)集成 (Continuous integration 簡(jiǎn)稱 CI): 指的是頻繁的將代碼集成到主干。
持續(xù)集成的流程: 提交、測(cè)試、構(gòu)建、測(cè)試、部署、回滾
1.2 Jenkins 介紹
Jenkins 是一款流行的開源持續(xù)集成 (Continuous Integration) 工具,廣泛用于項(xiàng)目開發(fā),具有自動(dòng)化構(gòu)建、測(cè)試、部署等功能。
Jenkins 特點(diǎn):
- 開源的 Java 語(yǔ)言開發(fā)持續(xù)集成工具,支持持續(xù)集成、持續(xù)部署。
- 易于安裝部署
- 消息通知、測(cè)試報(bào)告
- 分布式構(gòu)建
- 文件識(shí)別
- 豐富的插件支持
2. 持續(xù)集成環(huán)境安裝
服務(wù)器規(guī)劃
名稱 | IP地址 | 安裝軟件 |
---|---|---|
代碼托管服務(wù)器 | 192.168.3.57 | Gitlab |
持續(xù)集成服務(wù)器 | 192.168.3.58 | Jenkins、jdk、maven、Git |
應(yīng)用測(cè)試服務(wù)器 | 192.168.3.0 | jdk |
2.1 Gitlab 安裝
Gitlab 是一個(gè)用于倉(cāng)庫(kù)管理系統(tǒng)的開源項(xiàng)目,使用 Git 作為代碼管理工具,并在此基礎(chǔ)上搭建起來的 web 服務(wù)。
# 1. 安裝依賴
yum -y install policycoreutils openssh-server openssh-clients postfix
# 2. 啟動(dòng) ssh 服務(wù),并設(shè)置開機(jī)啟動(dòng)。
systemctl start sshd & systemctl enable sshd
# 3. 啟動(dòng) postfix 服務(wù),并設(shè)置開機(jī)啟動(dòng)
systemctl start postfix & systemctl enable postfix
# 4. 開放 ssh、http 服務(wù),并重新加載防火墻
firewall-cmd --add-service=ssh --permanent
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
# 5. 添加 Gitlab 鏡像倉(cāng)庫(kù),并安裝
tee /etc/yum.repos.d/gitlab-ce.repo <<-'EOF'
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1
EOF
# 安裝 gitlab
yum makecache
# yum list gitlab-ce --showduplicates
yum install gitlab-ce
# yum install --setopt=obsoletes=0 gitlab-ce-16.0.0-ce.0.el7 -y
# 6. 修改 gitlab 配置
vim /etc/gitlab/gitlab.rb
# external_url 'http://192.168.3.57:30001'
# nginx['listen_port'] = 30001
# 7. 重載配置,啟動(dòng) gitlab
gitlab-ctl reconfigure
gitlab-ctl restart
# 8. 開放端口
firewall-cmd --zone=public --add-port=30001/tcp --permanent
firewall-cmd --reload
# 啟動(dòng)成功后,修改管理員 root 密碼,就可以登錄了。
# 查看默認(rèn)密碼,默認(rèn)密碼保存 24 小時(shí) cat /etc/gitlab/initial_root_password
# 訪問 http://192.168.3.57:30001
2.2 Jenkins 安裝
# 1. 安裝 jdk
yum -y remove java-*
# 請(qǐng)選擇合適的jdk 版本 https://pkg.jenkins.io/redhat-stable/
rpm -ivh jdk-17_linux-x64_bin.rpm
tee /etc/profile.d/java.sh <<-'EOF'
JAVA_HOME=/usr/java/jdk-17/
CLASSPATH=%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export PATH CLASSPATH JAVA_HOME
EOF
source /etc/profile.d/java.sh
# 2. 測(cè)試 jdk 是否安裝成功
java -version
# 3. 獲取 Jenkins 安裝包
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum install fontconfig -y
# yum list jenkins --showduplicates
yum install jenkins -y
# 最新的支持 jdk 8 的 Jenkins 版本 2.346
# yum install --setopt=obsoletes=0 jenkins-2.346.3-1.1 -y
# 4. 指定 root 用戶運(yùn)行 Jenkins,后面持續(xù)部署需要用到 root 權(quán)限去執(zhí)行腳本
vim /usr/lib/systemd/system/jenkins.service
#User=root
#Group=root
# 5. 啟動(dòng) Jenkins
systemctl daemon-reload
systemctl start jenkins
# 6. 開放端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
# 啟動(dòng)成功后,修改管理員 root 密碼,就可以登錄了。
# 查看默認(rèn)密碼, cat /var/lib/jenkins/secrets/initialAdminPassword
# 訪問 192.168.3.58:8080
2.3 Jenkins 插件安裝
# jenkins 菜單切換到 Manage Jenkins > Plugins > Available plugins
cd /var/lib/jenkins/updates/
sed -i 's#updates.jenkins.io/download/plugins#mirrors.tuna.tsinghua.edu.cn/jenkins/plugins#g' default.json && sudo sed -i 's#www.google.com#www.baidu.com#g' default.json
# jenkins 菜單切換到 Manage Jenkins > Plugins > Advanced settings
# https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json 替換 https://updates.jenkins.io/update-center.json
# 提交保存
# 重啟 Jenkins,瀏覽器訪問 http://192.168.3.58:8080/restart# 重啟好之后,安裝插件 Localization: Chinese (Simplified)、git、Credentials Binding Plugin、Role-based Authorization Strategy
# 配置 jdk、maven
# 配置 Jebnkins 系統(tǒng)環(huán)境變量 JAVA_HOME、M2_HOME、PATH+EXTRA
# PATH+EXTRA 的值配 $M2_HOME/bin
3. Jenkins 構(gòu)建 maven 項(xiàng)目
Jenkins 自動(dòng)構(gòu)建項(xiàng)目的類型:
- 自由風(fēng)格軟件項(xiàng)目 (freeStyle Project)
- maven 項(xiàng)目 (Maven Project)
- 流水線項(xiàng)目 (Pipeline Project) (推薦使用這種,自由靈活)
安裝插件 Deploy to container 用于部署 war/ear 包
安裝插件 maven integration 用于 maven 項(xiàng)目的構(gòu)建
3.1 Pipeline 流水線項(xiàng)目構(gòu)建
Pipeline 簡(jiǎn)單來說,就是一套運(yùn)行在 jenkins 上的工作流框架,將原來獨(dú)立運(yùn)行于單個(gè)或者多個(gè)節(jié)點(diǎn)的任務(wù)連接起來,實(shí)現(xiàn)單個(gè)任務(wù)難以完成的復(fù)雜流程編排和可視化的工作。
安裝插件 Pipeline、Pipeline: Stage View、 用于構(gòu)建 Pipeline 流水線項(xiàng)目
如何創(chuàng)建 Jenkins Pipeline 呢?
- Pipeline 腳本是由 Groovy 語(yǔ)言實(shí)現(xiàn)的,
- Pipeline 支持兩種語(yǔ)法,Declarative(聲明式的) 和 Script Pipeline (腳本式語(yǔ)法)
- Pipeline 有兩種創(chuàng)建方法,可以直接在 jenkins 的 web ui 種創(chuàng)建腳本,也可以創(chuàng)建一個(gè) Jenkinsfile 腳本放入源碼中
可以利用 Jenkins 片段生成器生成腳本 http://192.168.3.58:8080/job/spring-cloud-alibaba-study-pipeline/pipeline-syntax/
Jenkinsfile 示例
pipeline {agent anystages {stage('pull') {steps {checkout scmGit(branches: [[name: '*/main']], extensions: [], userRemoteConfigs: [[credentialsId: 'gitlab-auth-ssh', url: 'git@192.168.3.57:springcloud/spring-cloud-alibaba-study.git']])}}stage('build') {steps {sh 'mvn clean package'}}stage('deploy') {steps {echo 'deploy code'}}}
}
常用內(nèi)置構(gòu)建觸發(fā)器
- 觸發(fā)遠(yuǎn)程構(gòu)建
- 其他工程構(gòu)建后觸發(fā)(Build after other projects are build)
- 定時(shí)構(gòu)建(build periodically)
- 輪詢SCM (Poll SCM)
git hook 自動(dòng)觸發(fā)構(gòu)建:需要安裝兩個(gè)插件 Gitlab hook、Gitlab(新版本只需要安裝Gitlab插件)
安裝插件 Email Extension、Email Extension Template 用于發(fā)送構(gòu)建結(jié)果
4. 附錄
4.1 生成公鑰和私鑰
使用 ssh-keygen 生成公鑰和私鑰,用于免密操作。
# 生成 公鑰和私鑰,公鑰配置在 gitlab, 私鑰配置在 jenkins
ssh-keygen -t rsa
4.2 maven 安裝
# maven 安裝
wget -c https://dlcdn.apache.org/maven/maven-3/3.9.6/binaries/apache-maven-3.9.6-bin.zip
# 配置 maven 環(huán)境變量
tee /etc/profile.d/maven.sh <<-'EOF'
export MAVEN_HOME=/usr/maven/apache-maven-3.9.6
export PATH=$PATH:$MAVEN_HOME/bin
EOF
# 刷新環(huán)境變量,使之生效
source /etc/profile.d/maven.sh
# 改 maven 的本地倉(cāng)庫(kù)位置、加速鏡像源
vim /usr/maven/apache-maven-3.9.6/conf/settings.xml
#<localRepository>/root/data/mvnRepo</localRepository>
#<mirror>
# <id>nexus-aliyun</id>
# <mirrorOf>central</mirrorOf>
# <name>Nexus aliyun</name>
# <url>http://maven.aliyun.com/nexus/content/groups/public</url>
#</mirror>
參考文獻(xiàn)
Gitlab官網(wǎng)
Jenkins官網(wǎng)
groovy教程
SonarQube官網(wǎng)
maven官網(wǎng)
openJDK官網(wǎng)
Oracle JDK官網(wǎng)