Linux:Jenkins项目拉取gitlab代码后自动执行脚本上传(3)

0.环境介绍

效果是我去gitlab上修改了代码,再手动点击Jenkins的构建项目,他会自动上传网页到我的web服务器上(这里的web服务器模拟的预生产环境)

主机ip地址部署的服务
gitlab192.168.6.7gitlab
Jenkins192.168.6.6Jenkins,httpd
web192.168.6.5httpd
test192.168.6.4用于拉取推送git项目

1.部署gitlab

Linux:Gitlab:16.9.2 (rpm包) 部署及基础操作(1)_non-fatal posttrans scriptlet failure in rpm packa-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/w14768855/article/details/136821311?spm=1001.2014.3001.5501Linux:Gitlab:16.9.2 创建用户及项目仓库基础操作(2)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/w14768855/article/details/136852844?spm=1001.2014.3001.5501我这里部署完了Jenkins之后创建了一个仓库,并写了一个index的html文件,我的仓库名字为git


2.部署Jenkins

Linux:rpm部署Jenkins(1)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/w14768855/article/details/136920259?spm=1001.2014.3001.5501Linux:Jenkins执行项目拉取gitlab代码(2)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/w14768855/article/details/136966355?spm=1001.2014.3001.5501我这里的Jenkins做到了项目库可以拉取代码,我本章内容会跟据上面两篇文章继续写

部署httpd,只用进行安装,开启即可,后面做成的效果就是,test上拉取gitlab修改完推送,Jenkins构建完项目会自动执行想要的执行的脚本(也就是自动部署的脚本)

yum -y install httpd
systemctl start httpd

访问服务器ip(不要加8080就是访问的httpd页面)

这样就行


4.部署web

只需要安装开启一下httpd就行,不要修改默认页面,网页一会由jenkins自己去自动部署

yum -y install httpd
systemctl start httpd


5.部署test

test用于拉取git内容,推送一下就行,这里创建了一个test模拟的我们员工上传了代码,Jenkins他构建完会自动上传gitlab中的文件给web

这里只需test可以去把公钥放入gitlab,可以不用密码拉取推送即可

Linux:git的基础操作-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/w14768855/article/details/136787643?spm=1001.2014.3001.5501如果不会放公钥可以去看一下github怎么放,gitlab和github基本都一样,在设置或者用户设置里都可以,我这里不做过多的演示

👇实现的效果

[root@localhost ~]# git clone git@172.20.10.4:root/git.git
正克隆到 'git'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 0
接收对象中: 100% (6/6), done.
[root@localhost ~]# ls
anaconda-ks.cfg  fiseym.sh  git  jenkins-2.450-1.1.noarch.rpm
[root@localhost ~]# cd git/
[root@localhost git]# ls
index.html  README.md
[root@localhost git]# cat index.html
1123
[root@localhost git]# echo 111111111111 > index.html
[root@localhost git]# cat index.html
111111111111
[root@localhost git]# git add .
[root@localhost git]# git commit -m '123321'
[main c346f0f] 123321
 1 file changed, 1 insertion(+), 1 deletion(-)
[root@localhost git]# git push
warning: push.default 未设置,它的默认值将会在 Git 2.0 由 'matching'
修改为 'simple'。若要不再显示本信息并在其默认值改变后维持当前使用习惯,
进行如下设置:

  git config --global push.default matching

若要不再显示本信息并从现在开始采用新的使用习惯,设置:

  git config --global push.default simple

参见 'git help config' 并查找 'push.default' 以获取更多信息。
('simple' 模式由 Git 1.7.11 版本引入。如果您有时要使用老版本的 Git,
为保持兼容,请用 'current' 代替 'simple' 模式)

Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 273 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@172.20.10.4:root/git.git
   0ad50d0..c346f0f  main -> main
[root@localhost git]#


6.部署Jenkin发布代码(主要步骤)

效果是当我的gitlab内容做出了修改,我点击构建Jenkins的项目,他会在末尾执行一个脚本,脚本的内容写的就是,把拉取下来的代码发送到web上(也就是我们改了之后,Jenkins会自动发布文件到web服务器里)我这里修改的文件就是index.html

Linux:Jenkins执行项目拉取gitlab代码(2)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/w14768855/article/details/136966355?spm=1001.2014.3001.5501 这里是基于这个文章做的,上面这个文章效果出了,本章就能继续往下做

现在我去构建执行以下Jenkins的项目

构建的结果就是拉取gtilab的内容下来

可以在里面看到,他把拉取下来的内容放到了/var/lib/jenkins/workspace/git

现在我去Linux服务器里看一下(注意:以下操作是在Jenkins服务器上,不要搞混了

没问题

现在我去编写一个脚本

vim scp.sh

# 写入

#!/bin/bash
scp /var/lib/jenkins/workspace/git/* root@192.168.6.6:/var/www/html
scp /var/lib/jenkins/workspace/git/* root@192.168.6.5:/var/www/html

在执行前先去做个免密连接,需要把我们的ssh公钥发送给要传文件的目标放,要不等会要需要一直输入密码,我们在这里可以去输入密码,但是等会Jenkins是要搭配这个脚本的,Jenkins如果还要输入密码的话,那就不是自动化了

ssh-copy-id root@192.168.6.6
ssh-copy-id root@192.168.6.5

可能你好奇自己为什么还要给自己传一个,虽然自己给自己传文件,但是还是需要输入密码的

visudo

#在末尾添加内容

jenkins ALL=(ALL) NOPASSWD: /usr/bin/ssh

现在再去执行一下刚刚写的脚本

chmod +x scp.sh
./scp.sh

可以看到传输成功了、

现在我要去把这个脚本和Jenkins项目放到一起,这样的效果就是,后期构建项目的时候,先拉取下来,让后就会执行这个脚本,脚本就是传到别的服务器上进行测试

回到Jenkins的web页面

点击配置

 sudo ssh root@192.168.6.6 ./scp.sh

输入完点击保存(不要把我上面这段抄进去,你要根据你的ip地址,脚本名称去修改一下)

 

会到这里就好了


7.测试

现在我的Jenkins上搭建web页面和web服务器上的web页面都是这样的,因为刚刚测试脚本的时候同步了一下

现在我到test服务器上去修改一下项目 

再回到Jenkins服务器上点击一下构建项目

 

现在我只点击了一下构建,没做别的,直接去查看两个web页面

自动推送成功

  • 15
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 你可以使用以下脚本拉取 GitLab 上的代码: ``` #!/bin/bash # 设置 GitLab 仓库地址和访问令牌 GITLAB_URL="https://gitlab.com" GITLAB_TOKEN="your_access_token" # 设置 GitLab 项目 ID 和分支名称 PROJECT_ID="your_project_id" BRANCH_NAME="your_branch_name" # 设置 Jenkins 工作目录Git 仓库目录 WORKSPACE="/var/lib/jenkins/workspace" GIT_REPO="$WORKSPACE/git_repo" # 清空 Git 仓库目录 rm -rf $GIT_REPO/* # 克隆 GitLab 仓库到 Git 仓库目录 git clone --branch $BRANCH_NAME --depth 1 https://$GITLAB_TOKEN:x@$GITLAB_URL/api/v4/projects/$PROJECT_ID/repository $GIT_REPO # 进入 Git 仓库目录执行构建命令 cd $GIT_REPO # your_build_command ``` 其中,`GITLAB_URL` 是 GitLab 仓库的地址,`GITLAB_TOKEN` 是访问令牌,`PROJECT_ID` 是 GitLab 项目的 ID,`BRANCH_NAME` 是要拉取的分支名称,`WORKSPACE` 是 Jenkins 工作目录,`GIT_REPO` 是 Git 仓库目录。你需要根据实际情况修改这些变量的值,并在脚本中添加你的构建命令。 ### 回答2: Jenkins是一款开源的持续集成和交付工具,可以帮助我们实现自动化构建、测试和部署。为了拉取GitLab代码,我们可以通过以下脚本来实现: ```shell #!/bin/bash # 设置环境变量 GITLAB_URL="https://gitlab.com" # GitLab的URL地址 PROJECT_NAME="my-project" # 项目名称 BRANCH_NAME="master" # 分支名称 TARGET_DIR="/path/to/target/dir" # 代码目标路径 # 检查目标路径是否存在,如果不存在则创建 if [ ! -d "$TARGET_DIR" ]; then mkdir -p "$TARGET_DIR" fi # 拉取代码 cd "$TARGET_DIR" git clone "$GITLAB_URL/$PROJECT_NAME.git" "$TARGET_DIR" cd "$TARGET_DIR" git checkout "$BRANCH_NAME" # 更新代码 git pull origin "$BRANCH_NAME" # 输出拉取结果 if [ $? -eq 0 ]; then echo "代码拉取成功!" else echo "代码拉取失败!" fi ``` 在这个脚本中,我们首先定义了GitLab的URL地址、项目名称、分支名称和代码目标路径等环境变量。然后,在脚本中检查目标路径是否存在,如果不存在则创建。接着,使用`git clone`命令拉取代码到目标路径,并使用`git checkout`命令切换到指定的分支。最后,使用`git pull`命令来更新代码,并根据拉取结果输出成功或失败的提示信息。 通过在Jenkins的构建步骤中执行脚本,我们就可以实现自动拉取GitLab代码的功能。 ### 回答3: Jenkins是一个开源的持续集成工具,它可以用于自动化构建、测试和部署软件项目。在使用Jenkins时,我们可以编写脚本来实现自动拉取GitLab代码的功能。 要使用Jenkins拉取GitLab代码,我们可以通过以下脚本来实现: 1. 在Jenkins中创建一个新的任务,选择自由风格的项目。 2. 在构建触发器中选择“定期构建”,并输入拉取代码的时间间隔。 3. 在构建环境中选择“删除工作空间”,这将清理之前构建的代码。 4. 在构建步骤中选择“执行Shell”,这将允许我们编写拉取代码脚本。 5. 在Shell脚本中,我们可以使用Git命令来拉取GitLab上的代码。以下是一个简单的例子: ``` #!/bin/bash cd /path/to/project git checkout master git pull origin master ``` 以上脚本会首先进入项目所在的目录,然后切换到master分支,并拉取最新的代码。 6. 保存并建立任务后,Jenkins将会在设置的时间间隔内自动执行这个任务,从GitLab拉取最新的代码。 总结起来,通过在Jenkins任务中编写一个基于Git命令的Shell脚本,我们就可以轻松地实现Jenkins拉取GitLab代码的功能。这样,我们可以确保每次构建都使用最新的代码,提高开发效率和代码质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值