目前都是手动运行jenkins任务,这里可以通过webhook实现jenkins自动化执行任务.
代码仓库中配置webhook钩子,只要提交到代码仓库,代码仓库通过触发jekins指定任务并运行任务.
手写代码监控代码仓库(监控tag是否有新的,数量,cid),然后调用jenkins的api并执行任务
这里克隆02项目

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

5a2b34c1cc07fdcacae63c2506a8970f

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

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





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



bird.liliyy.top

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


#0.防止重复构建
if [ "$GIT_COMMIT" == "${GIT_PREVIOUS_SUCCESSFUL_COMMIT}" ];then
echo "重复构建"
echo "当前CID: ${GIT_COMMIT}"
echo "上一次CID ${GIT_PREVIOUS_SUCCESSFUL_COMMIT}"
exit 0
fi


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

| 代码(语言) | 使用方法 |
|---|---|
| php,python | ⼀般不需要额外的处理,直接打包,分发,部署(解压),后续增加个替换连接哪个数据库. |
| java | java源代码-->maven/gradle(编译/打包) |
| golang | 需要通过go环境编译-->⼆进制命令 |
| 前端代码 | 前端源代码-->npm/cnpm/yarn/..(编译,打包html,js)-->可以直接部署的资源 |
1.进入pom.xml所在目录
2.mvn clean package
clean 清除旧的构建生成的文件,避免旧文件影响新构建
package 编译+测试+打包
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/

/app/tools/maven/bin/mvn --version
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
mvn --version

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

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

cd hello/target/
scp hello-world-war-1.0.0.war 10.0.0.9:~
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


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








ssh-copy-id root@10.0.0.9

ssh root@10.0.0.9 hostname

vim /code/hello/src/main/webapp/index.jsp
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


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.通知#####"


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


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

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
10.0.0.7:china.liliyy.top
china.liliyy.top


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

这里复制02-bird项目



#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.通知#####"
vim /code/china/china-ex-main/html/index.html

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
