linux运维知识体系

DevOps落地

24/03/18
67
0

🚀案例01-自动触发jenkins任务

目前都是手动运行jenkins任务,这里可以通过webhook实现jenkins自动化执行任务.

代码仓库中配置webhook钩子,只要提交到代码仓库,代码仓库通过触发jekins指定任务并运行任务.

手写代码监控代码仓库(监控tag是否有新的,数量,cid),然后调用jenkins的api并执行任务

🔁自动触发jenkins任务流程

  1. 新版本代码提交到gitlab仓库
  2. gitlab通过钩子的方式连接到jenkins,触发jenkins执行构建任务
  3. jenkins拉取gitlab html项目代码(密钥认证方式)
  4. 执行部署脚本(打包,分发,解压)
  5. 成功/失败的通知

1️⃣新建一个webhook项目

这里克隆02项目

2️⃣开启钩子功能

Build when a change is pushed to GitLab. GitLab webhook URL: http://jk.liliyy.top:8080/project/04-bird-webhook-test

3️⃣生成令牌

5a2b34c1cc07fdcacae63c2506a8970f

4️⃣hosts解析(gitlab、jenkins)

vim /etc/hosts
10.0.0.71 gitlab.liliyy.top
10.0.0.72 jk.liliyy.top

5️⃣修改gitlab配置

勾选允许来自web hooks和服务对本地网络的请求

6️⃣gitlab配置webhooks

7️⃣测试webhook功能(手动执行)

8️⃣推送新版本代码到gitlab仓库

升级代码版本为v5版本

vim /code/bird/index.html

推送新版本代码到代码仓库

git add .
git commit -m "v5"
git tag -a "v5.1" -m "v5"
git push -u origin master
git push -u origin --tags

9️⃣触发jenkins自动执行构建任务

🔍查看构建结果

🌐浏览器访问

bird.liliyy.top

⚠️故障:

问题1:没有进行hosts解析。

🛑案例02-防止重复构建

1️⃣新建一个构建任务

2️⃣修改构建步骤脚本

  • 添加一个判断条件
#0.防止重复构建
if [ "$GIT_COMMIT" == "${GIT_PREVIOUS_SUCCESSFUL_COMMIT}" ];then
    echo "重复构建"
    echo "当前CID: ${GIT_COMMIT}"
    echo "上一次CID ${GIT_PREVIOUS_SUCCESSFUL_COMMIT}"
    exit 0
fi

3️⃣开始构建

✅查看结果

第二次构建检测到和上次构建的版本一致,就不会继续执行后续的部署步骤了

☕案例03-jenkins发布java代码

代码(语言) 使用方法
php,python ⼀般不需要额外的处理,直接打包,分发,部署(解压),后续增加个替换连接哪个数据库.
java java源代码-->maven/gradle(编译/打包)
golang 需要通过go环境编译-->⼆进制命令
前端代码 前端源代码-->npm/cnpm/yarn/..(编译,打包html,js)-->可以直接部署的资源

🔧java代码编译

  • java源代码-->maven/gradle/...编译打包工具-->jar包/war包
  • 打包/编译-->下载源代码的依赖,默认从官网下载-->修改为阿里源/清华源
  • 编译java代码流程
1.进入pom.xml所在目录
2.mvn clean package
clean   清除旧的构建生成的文件,避免旧文件影响新构建
package 编译+测试+打包

📦安装maven

1️⃣前期准备

1.安装jdk
yum install -y java-11
2.传输
scp apache-maven-3.9.6-bin.tar.gz root@10.0.0.72:~
3.创建目录
mkdir -p /app/tools/
4.解压maven压缩包到/app/tools/目录
tar xf apache-maven-3.9.6-bin.tar.gz -C /app/tools/
5.创建软连接
ln -s /app/tools/apache-maven-3.9.6/ /app/tools/maven
5.查看文件内容
ll /app/tools/maven/

2️⃣查看版本

/app/tools/maven/bin/mvn --version

3️⃣修改环境变量

1.临时修改
echo export PATH=/app/tools/maven/bin/:$PATH
2.永久修改
echo 'export PATH=/app/tools/maven/bin/:$PATH'>>/etc/profile
3.查看
tail -1 /etc/profile
4.生效
source /etc/profile
5.测试
echo $PATH

4️⃣查看版本

mvn --version

🚀优化maven下载源

1.修改配置文件(优化下载源)
vim /app/tools/maven/conf/settings.xml
2.在mirrors下方添加阿里源
<mirror>
      <id>aliyunmaven</id>
      <mirrorOf>*</mirrorOf>
      <name>阿里云公共仓库</name>
      <url>https://maven.aliyun.com/repository/public</url>
      </mirror>

📁准备源代码

1.传输
scp hello-world-war-src-code.zip root@10.0.0.72:~
2.创建目录
mkdir -p hello/
3.解压到helllo目录
unzip hello-world-war-src-code.zip  -d hello/
4.查看目录内容
tree -F

🧪编译java源代码

1.进入hello目录
cd hello/
2.编译
mvn clean package

🚚将编译完成的war包传输到包含tomcat的web03服务器上

cd hello/target/
scp hello-world-war-1.0.0.war 10.0.0.9:~

🖥️在web上部署war包

1.重命名
mv hello-world-war-1.0.0.war  ROOT.war
2.查看
ll
3.查看tomcat目录
ll /app/tools/tomcat/webapps/
4.移走原目录下的ROOT目录
mv  /app/tools/tomcat/webapps/ROOT/ /tmp/
5.移动传输后的ROOT目录
mv ROOT.war /app/tools/tomcat/webapps/
6.查看
ll /app/tools/tomcat/webapps/

🌐浏览器访问

10.0.0.9:8080

📦gitlab

gitlab新建hello_java项目

上传java代码到gitlab仓库

git remote rename origin old-origin
git remote add origin git@gitlab.liliyy.top:gitlab-instance-e7d50b71/hello_java.git
git add .
git commit -m 'hello_v1.0'
git tag -a "hello_v1.0" -m "hello_v1.0"
git push -u origin master
git push -u origin --tags

gitlab页面查看

⚙️jenkins

jenkins配置maven命令参数

jenkins新建一个构建任务

修改配置

  1. 修改gitlab地址

  1. 修改mvn编译命令

开始构建

查看构建结果

🔑配置密钥认证

ssh-copy-id root@10.0.0.9

测试

ssh root@10.0.0.9 hostname

📝修改代码文件(v2.0)

vim /code/hello/src/main/webapp/index.jsp

提交代码到gitlab仓库

git add .
git commit -m "v2.0"
git tag -a "v2.0" -m "v2.0"
git push -u origin master
git push -u origin --tags

gitlab页面查看

📜jenkins配置部署脚本

  • post steps后续操作
Run only if build succeeds
只有构建成功才会运行后续内容

Run only if build succeeds or is unstable
只有构建成功或不稳定(相当于有警告)才会运行后续内容

Run regardless of build result
无论构建结果如何都会运行后续步骤

  • 脚本
echo $WORKSPACE
echo "#####1.打包#####"

echo "#####2.分发#####"
##2.ansible 
ip_list=10.0.0.9

for ip in $ip_list
do
    scp ./target/hello-world-war-*.war  root@$ip:/opt/ROOT.war
    #if
done


echo "#####3.部署#####"
#1.ssh ip 命令
#2.ansible 

for pp in $ip_list
do
    ssh root@$pp  <<-EOF
                   \mv /opt/ROOT.war /app/tools/tomcat/webapps/ROOT.war;
                   /app/tools/tomcat/bin/shutdown.sh ;
                   sleep 3;
                   /app/tools/tomcat/bin/startup.sh; 
	EOF
done

echo "#####4.通知#####"

开始构建

查看结果

查看工作目录是否有war包

[root@devops-jenkins ~]# ll /var/lib/jenkins/workspace/06-hello-java/target/

浏览器查访问

🌐案例04-jenkins发布前端代码

📦nodejs环境部署

📥前期准备

1.传输
scp node-v16.19.1-linux-x64.tar.xz root:10.0.0.72:~
2.解压到指定目录
tar xf node-v16.19.1-linux-x64.tar.xz -C /app/tools/
3.创建软连接
ln -s /app/tools/node-v16.19.1-linux-x64/ /app/tools/node
4.修改用户组
chown -R root.root /app/tools/node-v16.19.1-linux-x64/

⚙️修改环境变量

1.临时
echo export PATH=/app/tools/node/bin/:$PATH
2.永久
echo 'export PATH=/app/tools/node/bin/:$PATH' >>/etc/profile
3.生效
source /etc/profile
4.测试
node -v

🌐配置下载源

1.配置下载源
npm config set registry https://registry.npmmirror.com
配置后会自动创建/root/.npmrc

2.查看
cat ~/.npmrc

🧪手动打包前端代码

📁前期准备

1.传输
scp china-ex-main.zip root@10.0.0.72:~
2.解压
unzip china-ex-main.zip
3.进入目录
cd china-ex-main/
4.查看目录内容
ll

🔧编译

1.下载依赖
npm install ==>简写为npm i    #npm install 依赖存放到node_modules目录 下面.
2.进行打包(编译)               #打包后的文件一般放在dist目录下面.
npm run build

🚚dist目录内容部署到web中间件

1.web01创建目录
mkdir -p /app/code/china/
2.jenkins传输
scp dist/* root@10.0.0.7:/app/code/china/
3.修改配置文件
vim /etc/nginx/conf.d/china.liliyy.top.conf
4.检查
nginx -t
5.重启
systemctl reload nginx

🌐测试

hosts解析

10.0.0.7:china.liliyy.top

浏览器访问

china.liliyy.top

📦gitlab

新建仓库

上传代码到gitlab

git config --global user.name "Administrator"
git config --global user.email "admin@example.com"
git init


添加远程仓库地址
git remote add origin git@gitlab.liliyy.top:gitlab-instance-e7d50b71/china.git

git add .
git commit -m "v0.1"
git tag -a "v0.1" -m "v0.1"
git push -u origin master
git push -u origin --tags

gitlab页面查看

⚙️jenkins

jenkins新建一个构建任务

这里复制02-bird项目

修改配置

  • 修改git仓库为china

  • 编写脚本

  • 脚本
#0.vars
CODE_NAME=china.tar.gz
CODE_TMP_DIR=/opt/
CODE_DIR=/app/code/china/
IP_ADDRS="10.0.0.7"
export PATH=/app/tools/node/bin/:/app/tools/node/bin/:/app/tools/maven/bin/:/app/tools/maven/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

#1.编译
npm install
npm run build

#2.压缩包
cd dist
tar zcf ${CODE_TMP_DIR}${CODE_NAME} .

#3.分发-后期交给ansible copy模块/unarchive 模块
for ip in ${IP_ADDRS} 
do
    scp  ${CODE_TMP_DIR}${CODE_NAME}   $ip:${CODE_TMP_DIR}
done


#3.部署-后期交给ansible
#(未涉及到) tag标签
#代码直接解压到/app/code/china/目录下即可.
for ip in ${IP_ADDRS} 
do
    ssh $ip <<-EOF
    [  -d  ${CODE_DIR} ]  ||  mkdir -p ${CODE_DIR}
    tar xf  ${CODE_TMP_DIR}${CODE_NAME}  -C ${CODE_DIR}
	EOF
done

echo "#####4.通知#####"

修改源代码为v0.1版本

vim /code/china/china-ex-main/html/index.html

提交代码到git仓库

git config --global user.name "Administrator"
git config --global user.email "admin@example.com"
git init
git remote add origin git@gitlab.liliyy.top:gitlab-instance-e7d50b71/china.git
git add .
git commit -m "v0.1"
git tag -a "v0.1" -m "v0.1"
git push -u origin master
git push -u origin --tags

开始构建

查看结果

浏览器访问

china.liliyy.top