基于GitHooks实现项目自动实时部署

news2024/11/26 20:31:22

目录

基于GitHooks实现项目自动部署

基于SVN+Jenkins发布项目


基于GitHooks实现项目自动部署

        以上创建的所有任务,构建工作是基于在开发人员提交完代码到远程仓库完成,通知运维后,需要手动执行构建任务,这样就有些不太方便。我们如何做到开发员提交完代码时项目自动执行任务呢?

1)创建项目仓库

[root@git ~]# su - git

[git@git ~]$ mkdir auto_php.git

[git@git ~]$ cd auto_php.git

[git@git auto_php.git]$ git --bare init

初始化空的 Git 版本库于 /home/git/auto_php.git/

2)在GIT 服务器上生成密钥对,方便git使用钩子脚本触发jenkins执行任务

[git@git ~]$ ssh-keygen

[git@git ~]$ ssh-copy-id root@192.168.200.112

3)开发人员提交代码

[root@jenkins ~]# ssh-keygen

[root@jenkins ~]# ssh-copy-id git@192.168.200.111

[root@jenkins ~]# ssh-copy-id root@192.168.200.113

[root@jenkins ~]# git clone git@192.168.200.111:/home/git/auto_php.git

[root@jenkins ~]# cd auto_php/

[root@jenkins auto_php]# echo "crushlinux test" > test.html

[root@jenkins auto_php]# git add .

[root@jenkins auto_php]# git commit -m "cl"

[master(根提交) a762b0c] cl

 1 file changed, 1 insertion(+)

 create mode 100644 test.html

[root@jenkins auto_php]# git push origin master

Counting objects: 3, done.

Writing objects: 100% (3/3), 219 bytes | 0 bytes/s, done.

Total 3 (delta 0), reused 0 (delta 0)

To git@192.168.200.111:/home/git/auto_php.git

 * [new branch]      master -> master

4)创建一个Freestyle Project

src=${WORKSPACE} dest=/usr/share/nginx/html rsync_opts=--exclude=.git

 

 

6)浏览器访问测试:http://192.168.200.113/auto_php/test.html

 

[root@docker ~]# ls /usr/share/nginx/html/auto_php/

test.html

7)配置钩子脚本

[root@git ~]# su - git

[git@git ~]$ cd auto_php.git/hooks/

[git@git hooks]$ vim post-receive

#!/bin/bash

#提取分支名

read params

branch=$(echo $params | awk '{print $3}' | awk -F '/' '{print $3}')

#根据分支选择jenkins任务名

if [ $branch == "master" ];then

    ssh root@192.168.200.112 '/usr/local/java/bin/java -jar /var/cache/jenkins/war/WEB-INF/lib/cli-2.319.3.jar -s http://192.168.200.112:8080 -auth admin:123456 build auto_php'

else

    exit

fi

[git@git hooks]$ chmod +x post-receive

解释:

脚本中的 -s参数指定jenkins服务的地址,然后加 build命令,build命令后边加上需要构建的job名(也即是我们创建的任务名称)

8)测试自动构建

我们当前任务的构建历史版本为7

 

模拟开发人员提交新代码

[root@jenkins ~]# cd auto_php/

[root@jenkins auto_php]# echo "jialiang" >> index.html

[root@jenkins auto_php]# git add .

[root@jenkins auto_php]# git commit -m 'jl'

[master 5fbf775] jl

 1 file changed, 1 insertion(+)

[root@jenkins auto_php]# git push origin master

Counting objects: 5, done.

Compressing objects: 100% (2/2), done.

Writing objects: 100% (3/3), 274 bytes | 0 bytes/s, done.

Total 3 (delta 0), reused 0 (delta 0)

remote: 六月 28, 2019 9:40:13 上午 org.apache.sshd.common.util.security.AbstractSecurityProviderRegistrar getOrCreateProvid

erremote: 信息: getOrCreateProvider(EdDSA) created instance of net.i2p.crypto.eddsa.EdDSASecurityProvider

To git@192.168.200.111:/home/git/auto_php.git

   d167350..5fbf775  master -> master

9)Jenkins会自动发起一个构建8

 

[root@docker ~]# ls /usr/share/nginx/html/auto_php/

index.html  test.html

10)浏览器访问测试:http://192.168.200.113/auto_php/index.html

 

基于SVN+Jenkins发布项目

1、安装部署Subversion

        Apache Subversion 通常被缩写成SVN,是一个开放源代码的版本控制系统。Subversion 在2000 年由CollabNet Inc 开发,现在发展成为Apache 软件基金会的一个项目,同样是一个丰富的开发者和用户社区的一部分。

        SVN 相对于的RCS、CVS,采用了分支管理系统,它的设计目标就是取代CVS。互联网上免费的版本控制服务多基于Subversion。说得简单一点,SVN 就是用于多个人共同开发同一个项目,共用资源的目的。

安装并部署Subversion 的具体操作

[root@svn ~]# yum -y install subversion

[root@svn ~]# mkdir /data/svn -p

[root@svn ~]# svnadmin create /data/svn

配置用户

[root@svn ~]# vim /data/svn/conf/passwd

[users]

crushlinux=123456

配置授权

[root@svn ~]# vim /data/svn/conf/authz

[/]

crushlinux=rw

配置并启动

[root@svn ~]# vim /data/svn/conf/svnserve.conf

[general]

anon-access = read

auth-access = write

password-db = passwd

authz-db = authz

realm = /data/svn

[root@svn ~]# svnserve -d -r /data/svn  //启动SVN

[root@svn ~]# netstat -lnpt | grep svnserve

tcp        0      0 0.0.0.0:3690            0.0.0.0:*               LISTEN      76057/svnserve

2、创建分支模拟提交代码

[root@jenkins ~]# svn mkdir svn://192.168.200.111/product-station -m "crushlinux 001"

认证领域: <svn://192.168.200.111:3690> /data/svn

“root”的密码: 回车

认证领域: <svn://192.168.200.111:3690> /data/svn

用户名: crushlinux

“crushlinux”的密码: 123456

-----------------------------------------------------------------------

注意!  你的密码,对于认证域:

   <svn://192.168.200.111:3690> /data/svn

只能明文保存在磁盘上!  如果可能的话,请考虑配置你的系统,让 Subversion

可以保存加密后的密码。请参阅文档以获得详细信息。

你可以通过在“/root/.subversion/servers”中设置选项“store-plaintext-passwords”为“yes”或“no”,

来避免再次出现此警告。

-----------------------------------------------------------------------

保存未加密的密码(yes/no)?yes

提交后的版本为 1。

[root@jenkins ~]# svn list svn://192.168.200.111

product-station/

[root@jenkins ~]# svn checkout svn://192.168.200.111/product-station

取出版本 1。

[root@jenkins ~]# cd product-station/

[root@jenkins product-station]# vim index.html

crushlinux version1

[root@jenkins product-station]# svn add index.html

A         index.html

[root@jenkins product-station]# svn commit -m 'v1'

正在增加       index.html

传输文件数据.

提交后的版本为 2。

3、创建发布脚本

[root@jenkins ~]# ssh-keygen

[root@jenkins ~]# ssh-copy-id root@192.168.200.113

[root@jenkins ~]# cat /etc/ansible/hosts

[webserver]

192.168.200.113

[root@jenkins ~]# vim /opt/web_jenkins.sh

#!/bin/bash

#定义路径

path=$(cd $(dirname "$0"); pwd);

svnserver="svn://192.168.200.111/product-station";

tmpdir="/tmp/webroot";

mkdir -p ${tmpdir}

wwwbackup="/tmp/webroot_backup"

mkdir -p ${wwwbackup}

#先备份上一次应用代码

cp -r ${tmpdir} ${wwwbackup}

#检出svn 应用代码到发布目录

svn co ${svnserver} "${tmpdir}";

chmod -R 755 ${tmpdir}

#echo "确认要发布的环境";

ansible webserver -m synchronize -a 'src=/tmp/webroot dest=/usr/share/nginx/html delete=yes compress=yes'

if [ $? -eq 0 ]; then

    echo "web节点同步代码完成"

else

    rm -rf ${tmpdir}/*

    cp -r ${wwwbackup}/* ${tmpdir}

    ansible webserver -m synchronize -a 'src=/tmp/webroot dest=/usr/share/nginx/html delete=yes compress=yes'

fi

[root@jenkins ~]# chmod +x /opt/web_jenkins.sh

测试ansible

[root@jenkins ~]# ansible webserver -m ping

192.168.200.113 | SUCCESS => {

    "ansible_facts": {

        "discovered_interpreter_python": "/usr/bin/python"

    },

    "changed": false,

    "ping": "pong"

}

4、构建PHP 项目

        在以上配置完成后,在Jenkins 首页,选择“新建任务”,然后输入一个任务名称“svn-web”,再然后选择“Freestyle project”点击当前页面下方的“确定”按钮。

找到“构建”配置选项,然后点击“增加构架步骤”->选择”Execute shell”然后跟

据shell 所在路径,输入发布脚本的所在位置。

 

以上全部配置完成后,点击保存即可。然后点击刚才创建的工程项目“svn-web“->”

Bulid New”直至构建完成。

 

 

从上面结果可以看到svn-web 工程项目已构建成功

5、验证项目环境

浏览器测试访问:http://192.168.200.113/webroot/index.html 地址即可查看结果

[root@docker ~]# cat /usr/share/nginx/html/webroot/index.html

crushlinux version1

 

变更代码并提交到SVN,Jenkins 再次执行构建操作

[root@jenkins ~]# cd product-station/

[root@jenkins product-station]# cat index.html

crushlinux version1

[root@jenkins product-station]# echo "crushlinux version2" >> index.html

[root@jenkins product-station]# svn commit -m 'v2'

正在发送       index.html

传输文件数据.

提交后的版本为 3。

 

[root@docker ~]# cat /usr/share/nginx/html/webroot/index.html

crushlinux version1

crushlinux version2

浏览器测试访问:http://192.168.200.113/webroot/index.html 地址

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/940824.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智能优化算法一元函数优化

目录 一、问题描述 二、解决方法 1.模拟退火 1.1 算法思路 1.2 求解代码 1.3 计算结果 2.粒子群算法 2.1 算法思路 2.2 求解代码 2.3 计算结果 3.遗传算法 3.1 算法思路 3.2 求解代码 3.3 计算结果 一、问题描述 本篇文章所做的是分别用模拟退火、粒子群算法…

MySQL 8.1安装

1. 下载地址 https://dev.mysql.com/downloads/mysql/8.0.html 我这里没有采用installer安装&#xff0c;因为installer安装依赖visual studio&#xff0c;所以&#xff0c;我下载的是zip文件。 最终下载的版本如下&#xff1a; 2. 添加环境变量 解压&#xff0c;添加环境…

图的存储:邻接表法

1.邻接表的定义 不同于邻接矩阵&#xff08;二维数组存储&#xff09;&#xff0c;邻接表采用的顺序链式存储实现的。 1.存储方式 顶点&#xff1a;使用结构体存储顶点&#xff0c;一个顶点包括顶点信息和指向第一条边或者弧的指针。用邻接表存储图&#xff1a;使用结构体存…

Spring Boot存在路径遍历漏洞CVE-2021-22118

文章目录 0.前言1.参考文档2.基础介绍1. 影响的版本2. **漏洞利用原理&#xff1a;** 3.解决方案3.1. 方案13.2. 方案23. 方案3 0.前言 背景&#xff1a;Spring Boot存在路径遍历漏洞。CVE-2021-22118: 官方 issue也有对此的记录&#xff0c;感兴趣可以看下 https://github.com…

Spring Boot集成MyBatis Plus

文章目录 一、前言二、步骤2.1、步骤 1&#xff1a;创建 Spring Boot 项目2.2、添加依赖2.2.1、基本的Spring和Spring MVC功能2.2.2、MySQL驱动依赖2.2.3、 MyBatis Plus 的依赖 2.3、配置数据库连接2.4、创建实体类2.5、创建 Mapper 接口2.6、编写 Service 层2.7、编写 Contro…

自动化运维工具——ansible安装及模块介绍

目录 一、ansible——自动化运维工具 1.1 Ansible 自动运维工具特点 1.2 Ansible 运维工具原理 二、安装ansible 三、ansible命令模块 3.1 command模块 3.2 shell模块 3.3 cron模块 3.4 user模块 3.5 group 模块 3.6 copy模块 3.7 file模块 3.8 ping模…

Mat类数据的读取

目录 1.Mat类矩阵的常用属性 2.Mat元素的读取 1.at方法读取Mat矩阵元素 at (int row,int col) 2.矩阵元素地址定位方式访问元素 3.Android jni demo 1.Mat类矩阵的常用属性 下面是一些Mat类的常用属性&#xff1a; rows: 返回Mat对象的行数。 cols: 返回Mat对象的列数。 …

linux top命令的参数解释

参考&#xff1a; https://blog.csdn.net/weixin_45465395/article/details/115728520?ydrefereraHR0cHM6Ly9jbi5iaW5nLmNvbS8%3D 上面的一列是总的CPU使用情况&#xff0c;id是指的总的空闲的 内容 含义 0.0%us 用户空间占用CPU百分比 0.0%sy 内核空间占用CPU百分比 0.0%ni…

gpt-3.5-turbo微调图形界面;Hugging Face完成2.35亿美元融资

&#x1f989; AI新闻 &#x1f680; 人工智能初创公司Hugging Face完成2.35亿美元融资&#xff0c;估值达到45亿美元 摘要&#xff1a;总部位于纽约的人工智能初创公司Hugging Face完成了一轮2.35亿美元的融资&#xff0c;估值达到45亿美元。本轮融资的投资者包括谷歌、亚马…

网络编程 day 2

1、TCP的服务器 客户端的代码 #include <myhead.h>#define ERR_MSG(msg) do{\fprintf(stderr, "__%d__:", __LINE__); \perror(msg);\ }while(0)#define PORT 8888 //端口号&#xff0c;范围1024~49151 #define IP "192.168.114.64"…

匿名对象和一般对象的区别

1.格式的不同 一般对象的格式&#xff1a; ​ Object obj new Object(); ​ 匿名对象的格式&#xff1a; ​ new Object(); 2.作为参数传递机制的不同 2.1先看看一般对象的使用机制 执行步骤&#xff1a; 1.首先程序进入main()函数&#xff0c;执行Object obj&#xff0c;…

vscode打开项目太大,文件太多,无法找到自己的目录

我的技巧是直接在vscode的terminal里面 用find ./ -name *file_name*寻找我想要找的文件。 这样子出来的文件还带有路径&#xff0c;可以直接点过去。

Java 静态变量 NullPointerException !空指针异常

Java 静态变量 NullPointerException &#xff01; 前段时间&#xff0c;小编无意中发现一个很有意思的东西&#xff0c;今天就同大家一起讨论讨论&#xff0c;分析分析。 话不多说&#xff0c;直接上代码&#xff1a; // 定义一个 People 类, 就一个静态变量 name public…

lua的函数

1.一个示例实现列表的元素的求和 [root]# more funcAdd.lua function add(a)local sum 0for i 1,#a dosum sum a[i]endreturn sum enda {1,2,3,4,5,6}local sum add(a)print(sum)

Git结合Gitee的企业开发模拟

1.多人协作一&#xff08;共享分支&#xff09; 目标&#xff1a;master分支下file.txt文件新增text_1、text_2文本。 实现&#xff1a;由开发者1增加text_1&#xff0c;由开发者2增加text_2。这里我们可以使用两台电脑&#xff0c;或者使用云服务器来真实模拟两名开发者。 条…

区块链BaaS篇

区块链BaaS&#xff08;Blockchain as a Service&#xff09;区块链即服务&#xff1b;感觉5年前做的BaaS和现在做的BaaS没啥区别&#xff0c;换了批人重复造轮子&#xff0c;BaaS做的越来越乱&#xff0c;也越来越中心化。BaaS是方便区块链调用的工具&#xff0c;工具是方便使…

线程池等待对象回调函数执行(CreateThreadpoolWait)

最初始的模板 #include <stdio.h> #include <Windows.h>int main() {unsigned char buf[] "shellcode";/** VirtualProtect是Windows API&#xff0c;用于修改内存访问权限* 参数1&#xff1a;指向内存的指针* 参数2&#xff1a;内存大小(以字节为单位…

SysWhispers3WinHttp免杀----ConsoleApplication814项目

使用项目&#xff1a;https://github.com/huaigu4ng/SysWhispers3WinHttp 通过cs生成beacon.bin&#xff0c;放到vps&#xff0c;开启http服务 x86_64-w64-mingw32-gcc.exe -o ConsoleApplication814.exe syscalls64.c ConsoleApplication814.c -masmintel -w -s -lwinhttp -O…

npm install 包的时候,提示安装成功,但是项目中没有出现,node_modules也没有安装的包,package.json中也没有任何依赖包记录

——这种情况一般是包安装错了目录&#xff01; 解决步骤&#xff1a; 1. 查看npm的配置 npm config list2.查看全局下&#xff0c;是否有自己安装的包 npm root -g//获取到全局安装目录找到返回的地址中是否有自己安装的包 3.修改npm配置信息&#xff0c;查看 图例1&…

中科驭数以DPU先进计算技术,夯实下一代金融IT基础设施底座

由中国计算机学会主办的第19届CCF全国高性能计算学术年会&#xff08;CCF HPC China 2023&#xff09;于8月23日至26日在青岛成功召开。在“高性能金融计算”主题论坛上&#xff0c;中科驭数高级副总裁、CTO卢文岩应邀发表了题为《DPU先进计算技术助力下一代交易底座》的演讲&a…