devops-Jenkins部署与基础配置

蒋浩
2023-12-01

官方网址:https://jenkins.io/zh/

1、配置 java 环境并部署 jenkins

#1:java 环境配置:
root@jenkins:/usr/local/src# tar xvf jdk-8u192-linux-x64.tar.gz
root@jenkins:/usr/local/src# ln -sv /usr/local/src/jdk1.8.0_192/ /usr/local/jdk
root@jenkins:/usr/local/src# ln -sv /usr/local/jdk/bin/java /usr/bin/ #java命令软连接
root@jenkins:/usr/local/src# vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
root@jenkins:/usr/local/src# source /etc/profile
root@jenkins:/usr/local/src# java -version
java version "1.8.0_192"
Java(TM) SE Runtime Environment (build 1.8.0_192-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.192-b12, mixed mode)

#2:启动 Jenkins
#(1)通过 jar 包直接启动jenkins: 
# java \ -Dcom.sun.management.jmxremote \ -Dcom.sun.management.jmxremote.port=12345 \ -Dcom.sun.management.jmxremote.authenticate=false\-Dcom.sun.management.jmxremote.ssl=false \ -Djava.rmi.server.hostname="192.168.8.2 " \ -jar jenkins-2.138.3.war &
#(2)rpm 包安装 jenkins 配置: 
[root@s1 ~]# grep -v "#" /etc/sysconfig/jenkins | grep -v "^$"
JENKINS_HOME="/var/lib/jenkins"
JENKINS_JAVA_CMD=""
JENKINS_USER="jenkins"
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true \ -Dcom.sun.management.jmxremote \ -Dcom.sun.management.jmxremote.port=12345 \ -Dcom.sun.management.jmxremote.authenticate=false \ -Dcom.sun.management.jmxremote.ssl=false \ -Djava.rmi.server.hostname="192.168.7.101" \ "
JENKINS_PORT="8080"
JENKINS_LISTEN_ADDRESS=""
JENKINS_HTTPS_PORT=""
JENKINS_HTTPS_KEYSTORE=""
JENKINS_HTTPS_KEYSTORE_PASSWORD=""
JENKINS_HTTPS_LISTEN_ADDRESS=""
JENKINS_DEBUG_LEVEL="5"
JENKINS_ENABLE_ACCESS_LOG="no"
JENKINS_HANDLER_MAX="100"
JENKINS_HANDLER_IDLE="20"
JENKINS_ARGS=""
#可选启动参数:
JENKINS_JAVA_OPTIONS="-server -Xms1g -Xmx1g -Xss512k -Xmn1g
-XX:CMSInitiatingOccupancyFraction=65
-XX:+UseFastAccessorMethods
-XX:+AggressiveOpts -XX:+UseBiasedLocking
-XX:+DisableExplicitGC -XX:MaxTenuringThreshold=10
-XX:NewSize=2048M -XX:MaxNewSize=2048M -XX:NewRatio=2
-XX:PermSize=128m -XX:MaxPermSize=512m -XX:CMSFullGCsBeforeCompaction=5
-XX:+ExplicitGCInvokesConcurrent -XX:+UseConcMarkSweepGC -XX:+UseParNewGC
-XX:+CMSParallelRemarkEnabled -Djava.awt.headless=true
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname="192.168.7.104" "

#3:Jenkins 启动过程:
#4:访问 jenkins 页面
#5:选择安装 jenkins 插件:
#6:插件安装过程中:
#插件安装过程中如果因为某种原因导致有有安装失败的插件,没有关系,可以后期再单独安装
#7:创建 jenkins 管理员:
#8:配置 jenkins URL:
#9:配置完成并登陆 jenkins:
#10:登陆 jenkins 界面:
#11:jenkins 插件管理及安装:
#插件安装目录: 
#插件下载地址:http://updates.jenkins-ci.org/download/plugins/
#安装插件: 
#搜索需要 gitlab 的插件并安装: gitlab 和 Blue Ocean
#12:配置 jenkins 权限管理:
#基于角色的权限管理,先创建角色和用户,给角色授权,然后把用户管理到角色。
#安装插件: 
#创建新用户: Jenkins—系统管理—管理用户:
#更改认证方式: Jenkins—系统管理—全局安全配置
#默认创建的用户登录后可以做任何操作,取决于默认的认证授权方式。
#创建角色: Jenkins—系统管理--Manage and Assign Roles
#添加角色: 
#对角色分配权限: 
#将用户关联到角色: 
#测试普通用户登录: 
#登录成功之的界面,没有系统管理权限,只能执行被授权过的job且没有了管理员权限。
#13:jenkins 邮箱配置:
#生成 QQ 邮箱登录授权码: 
#配置 jenkins 管理员邮箱: Jenkins—系统管理—系统设置:
#发件配置: 
#测试发送邮件:

2、基于 ssh key 拉取代码

#1:添加 ssh key:
ssh-rsa 
AAAAB3NzaC1yc2EAAAADAQABAAABAQC3niuTNTXCA4zoltRTu+qDMOyF0xglYFxIIZMolCH2+
Ma3L4v/D72WascVBD4LrkJM3S6KTSLn4M4+7l+9fe5LaZu0WSD2Se2N0FVcPFsYOK5ZwPoWiL
83R5T2bN4j69G7cAtHM5X5WOAuJs6ArSBSxsSnyeFnUFNw3rbmkCCt2TvrsmqTzEMA1PDQno
/7wB3n8JfxjaKp5oHNPQrwN0p0lGuUMSxGSNjCEIiexxqpyrJ0DPShs+XximSOO7noWbZq2nM
hsH7yWdwKN3qD00U52ACDijeAyKVa4ByQntDIPeCr8gdUZiT8rbfXtix2MhR2cCgZJAKYDQNAw
ltVVOCf root@jenkins.example.com
#2:添加 ssh key:
#3:创建 ssh key: ssh key 只用于免认证获取代码
#4:测试 ssh key:
#测试可以不使用用户名密码后直接获取代码

3、配置 jenkins 自动拉取代码

#1:jenkins 服务器添加证书:Jenkins-凭据-jenkins—全局凭据—添加凭据
#2:jenkins 创建 project:
#3:配置 git 项目地址和用户:
#添加完成的证书没有报错表示认证通过
#4:测试构建项目:
#点击立即构建: 
#验证构建结果: 
#服务器验证数据: 
#将代码部署至后端服务器: 
#脚本内容:
cd /var/lib/jenkins/workspace/test-demo1
scp -r ./* 192.168.7.103:/data/tomcat_webdir/myapp/
scp -r ./* 192.168.7.104:/data/tomcat_webdir/myapp/

4、pipline

官方介绍:https://jenkins.io/2.0/

#1:pipline 是帮助 Jenkins 实现 CI 到 CD 转变的重要角色
#2:pipline job 测试:
#创建 pipline job: 
#测试简单 pipline job 运行: 
node {
 stage("clone 代码"){
 echo "代码 clone"
 }
 stage("代码构建"){
 echo "代码构建"
 }
 stage("代码测试"){
 echo "代码测试"
 }
 
 stage("代码部署"){
 echo "代码部署"
 } }
#执行 pipline job: 
#生成拉取代码的 pipline 脚本: 
#更改 pipline job: 
node {
 stage("code clone"){
 echo "git clone"
 git credentialsId: 'b695c060-6a99-4ee3-bd4c-730bd4dd36ec', url: 
'git@192.168.8.3:test-service/test-project.git'
 }
 stage("code build"){
 echo "code build"
 }
 stage("code test"){
 echo "code test"
 }
 stage("code deploy"){
 echo "code deploy"
 } }
#执行 jenkins job: 
#验证 git clone 日志: 
#服务器验证数据: 
#pipline 中执行 shell 命令: 
node {
 stage("code clone"){
 echo "git clone"
 git credentialsId: 'b695c060-6a99-4ee3-bd4c-730bd4dd36ec', url: 
'git@192.168.8.3:test-service/test-project.git'
 sh "cd /root/.jenkins/workspace/pipline-test && tar czvf code.tar.gz ./*"
 }
 stage("code build"){
 echo "code build"
 }
 stage("code test"){
 echo "code test"
 }
 stage("code deploy"){
 echo "code deploy"
 } }
#3:jenkins 分布式构建:
#添加 slave 节点: Jenkins—系统管理—节点管理—新建节点
#配置 slave 节点: Slave 服务器创建工作目录,如果 slave 需要执行编译 job,则也需要配置 java 环境:
[root@jenkins-slave ~]# yum install java-1.8.0-openjdk –y
[root@jenkins-slave ~]# mkdir /data/jenkins/slave -pv
mkdir: created directory ‘/data’
mkdir: created directory ‘/data/jenkins’
mkdir: created directory ‘/data/jenkins/slave’
#添加 slave 认证凭据: 
#3:添加 slave 节点:
#4:jenkins slave 创建日志:
#5:如果 slave java 报错如下:
#6:验证 slave 状态:
#正常状态:
#时间不同步状态
#7:slave 状态:
#8:配置 slave 执行 job: Slave 的公钥也要同步到各个 web 服务器
node('slave-node1'){
 stage("code clone"){
 echo "git clone"
 sh "cd /data/jenkins/slave/workspace/pipline-test && rm -rf ./*"
 git credentialsId: 'b695c060-6a99-4ee3-bd4c-730bd4dd36ec', url: 
'git@192.168.8.3:test-service/test-project.git'
 sh "cd /data/jenkins/slave/workspace/pipline-test && tar czvf code.tar.gz ./*"
 }
 stage("code build"){
 echo "code build"
 }
 stage("code test"){
 echo "code test"
 }
 stage("code deploy"){
 echo "code deploy"
 } }
#9:验证 slave 执行构建:
 类似资料: