当前位置: 首页 > news >正文

jenkins+gitlab自动发布系统

认识jenkins

enkins是一个可扩展的持续集成引擎,是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。Jenkins非常易于安装和配置,简单易用。

官网:Jenkins

jenkins应用场景

 

  • 研发人员上传开发好的代码到github代码仓库

  • 需要将代码下载到nginx服务器部署

    • 运维人员手动下载再部署

    • 运维人员使用脚本下载再部署

场景2:

jenkins下载

 

jenkins安装

准备一台服务器安装jenkins

  • 静态IP(要求能上外网)

  • 主机名

  • 关闭防火墙,selinux

  • 时间同步

  • 确认openjdk1.8版本已经安装

sudo wget -O /etc/yum.repos.d/jenkins.repo \https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
sudo yum upgrade
# Add required dependencies for the jenkins package
sudo yum install fontconfig java-21-openjdk
sudo yum install jenkins
sudo systemctl daemon-reloadsudo systemctl enable jenkinssudo systemctl start jenkinssudo systemctl status jenkins

如果一切正确,可以看到以下输出

Loaded: loaded (/lib/systemd/system/jenkins.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2023-06-22 16:19:01 +03; 4min 57s ago

查看密码文件里的密码(此为初始管理员用户admin的密码)。通过浏览器访问填上密码(地址为服务器ip的8080端口)

cat /var/lib/jenkins/secrets/initialAdminPassword
d740b101534b753b89deccfd06365fc9

选择安装推荐的插件(如果是offline状态,或者报错找不到XXX插件,请参考下面的插件安装小节)

创建新管理员用户(创建了新的管理员用户后,原来的admin用户就不能用了),也可直接使用初始管理员admin登录

确认访问地址

进入jenkins主页面

git+github+jenkins

架构图

 

实验架构图

开发者电脑准备

第1步: 在开发者电脑上安装git工具

yum install git -y

第2步: 在开发者电脑上创建空密码密钥对

 

ssh-keygen -t rsa -f /root/.ssh/id_rsa -C "dev1" -N ""

第3步: 在开发者电脑上查看并复制公钥

cat /root/.ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+8f9vVJ8kskBojsxqaA95DQzLemCuA3o9nWE1sCjHHy/xxT4Ev57WbVCCPnCy3/pR49o5i7RE+5/dA4Ct+QXpj02pE2mPiehMIGFmjolhYFqIq7lnTSQ+zVtetIxnn2zmOx0qz+Zdr/wSCh/Czl7+Y2RClSq2sgD80/eF/uBpdlku2ejXAnIKFn3NekbqM4gYao/XTDLMW7D7pyQ0CFaI0xwEdXroy7ozAyFo76kvxs4IztAslcUeEj/CGha3WsLATRTeDNK5YGlI8jcw0WEcZocEhbS2RhkikQjACGgrae3WpJY/szH9BQeH8rIF2vR5s0DlPy9PJtBAxuUe8hJ/ dev1

第4步: 将开发者公钥添加到github

 

github上新建项目仓库  

开发者提交文件测试

 第1步: 在github上获取ssh免密地址

 第2步: 开发者电脑上设置开发者身份

git config --global user.name "dev"
git config --global user.email "dev@qq.com"
git config --global color.ui true

第3步: clone项目到开发者本地电脑

git clone git@github.com:cj3127/test_test.git
正克隆到 'test_test'...

第4步: 提交测试代码文件

cd test_test/
echo "test" >> README.mdgit add README.md
git commit -m "add README.md"git push -u origin master

第5步: github上验证

nginx服务器准备

在nginx服务器上安装nginx,并启动服务

yum install epel-release
yum install nginx -y
systemctl start nginx
systemctl enable nginx

jenkins安装插件

jenkins图形确认安装git pluginpublish over ssh插件

配置jenkins通过publish over ssh免密连接nginx

第1步: 在jenkins服务器上生成空密码密钥对

ssh-keygen -t rsa -f /root/.ssh/id_rsa -C "jenkins-server@qq.com" -N ""

第2步: 查看并复制私钥

cat /root/.ssh/id_rsa-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAvWekHSkS24a/9kN6SkDTjFdcdw5zuupaVY9KJd2Ejnfg7/ZU
6fqOO1b8bAzYMkf8aKTcStKEwBWV6TYA/ljGG/6oAz1UGwBke/Sw6wASp7wN4MUQ
HQDeHKv+odPHuSloK47e3LrjzCssXYPrvNmzsLKXIzbmiGJNAZYznYMBtnDNxpiy
1L+4zQeSTOfT0MCbF/KTgbyffRCNHC/m8Ow89NF1XW37he3XV8wimM6NrGtndw1N
YVZMyx85xEsK9m2Wxee+P7KgIdL5nmbGJOBbTUi4dlt9j4T+mOxr4AF9oaZKS0o2
oJlJyyl9TKtHQM6d2Qw8BGXOGMDVSB8WT1Q5UwIDAQABAoIBAHsCS4iQu2mDBwhN
IKgG0B2OQ0QjQ7A6Ma7tn6dV5ZgtbQ4Lenx3OFZ7mPaHpQWK0PgZUeTaMlMZ8cGD
TEPj3c4ipnVsKCpdJ+WFNj15T6RWMuEuutdLT/VpEreA9m5f4QKhCEZsrjNUOr0F
R13gOZ5hblz1c+VRilekeCMtCTi1jKkDdVNFRcdQe8m8kttFVC2hSPB7tJxEoxmp
kAPkPBwU0E/6pA591JYCUk7lNQ9eBDgoBbb9cglEa4tn3Hh7AoyXcJTvYoC1vH1M
zN/1MLHyME76a/intrQM9frYwgM1gUdZU5i5kt4/SFQfd/qM8Axvy7s0qcFf5jxo
Ey4Ob4kCgYEA9HkCeBMexLZnVbZrDNiaapANdPafY9PILduZ9nVQmWh4rRcu47r0
D1V6yDtBS8+p/sPJu/4KYEn/8yDWHjxd3O194XaAKl9xgqUPP23txohp99pHy2mL
21eqthC0QKk2bH23jAQxjd0MAz5mK4uO1r/BFhSnJpK4i5/jVIHqm3cCgYEAxlXq
lqSruCYzwzMX/7Gv1lqexmUGmXiqQ4LWtOlQIaL+BoPOajp2mJjJMsIF1qkQwZnp
L+WdP02j7esBD1hI9G+lISCyqjTG+OCdNFiQ3SFJDZoLrcBN1uByjgANPleMiP9y
zq+xa+zBQ2YEtAEA8gp37QzfA2P6zihCNQqmUAUCgYEAgcrFHs635SQaFI12pClT
QgQcwN42nR9RBdezFAAQvIGUoADQ6iLVdFajiy66ae9kh1eXAPHMvHZNJt1mEENo
aeTEkjEBtn1ZnEzZnYlVVbQS3n3K5BmzIM6YWXTg3ft4Y30TN4j6biDPQeGdCL1d
JnJDpt9sJrR6udY3MSSQU90CgYEAnqnkvRaG+Q42opWhQUAYdtaP5g6ztNq++rsU
oC11mTMXHIcc/gY/EdxIOH7WxN8DNJ232kVKAnZOCerSMkBiPImEBHhv9ZG7CyZF
HLctTHlwQ51Ucm9A1gFAIzEPZywKlR4l7grHWJtSEGTwpj+XTgnp3o1JayD0Zy/1
pxEZ8zECgYEAnS/PHs+164GYPkWlYxGw04UE4SlQGa0QqT1WfctFPctU5PVqpwHi
imEFS+V89p1N+bQpgEI+WqlRGgODcjIE0ho8DqhsKaqu0AeVPN91Dgi20giJE8xo
TnYioS3qpxXtPiwrVR8PUZ/WZ/YtM0jwvYXowsSHeqVfCUBNGHqvwEA=
-----END RSA PRIVATE KEY-----

第3步: 在jenkins中添加ssh私钥

第4步: 在jenkins服务器上配置对nginx服务器的免密登录

ssh-copy-id -i 10.1.1.14

第5步: 然后填写连接nginx信息,测试连接成功后保存

添加Jenkins服务器公钥到github

添加过程见上面(这里省略,直接看下面结果)

为jenkins服务器添加凭据

凭据是jenkins给自己的构建项目授权用的。

我们本项目案例里jenkins是通过ssh免密去找github的项目仓库clone或pull项目代码。

在前面的配置里已经把jenkins服务器的公钥添加到了github仓库上, 在jenkins服务器上root用户使用git clone 项目地址都可以成功。

但是jenkins服务本身并不允许使用自己的私钥去访问github的公钥, 给个凭据, 让它能做就解决问题了

总结: 凭据是一种和第三方程序(如github,gitlab等)通讯的权限授权。本案例的凭据就是允许使用ssh免密

可以把这个凭据在jenkins里授予给任何需要ssh免密通讯的构建项目。

第1步: 在jenkins界面添加凭据

jenkins任务创建

 第1步: 创建新任务

第2步: 自定义任务名称与风格

 第3步: 自定义任务描述

第4步: 定义源码管理

第5步:定义构建方法

第6步: 定义构建的源码,目标主机和目标目录

第7步: 设置完毕,保存,并验证

手动构建

 第1步: 立即构建

第2步: 在workspace工作区间查看

第3步: 查看控制台输出信息

第4步: nginx服务器上验证文件是否被传到nginx家目录

ls /usr/share/nginx/html/
404.html  index.html      poweredby.png
50x.html  nginx-logo.png  README.md
可以看到README.md被传过来了

小结

自动发布系统

Gitlab上创建自动构建仓库

第1步: gitlab上创建新仓库

第2步: 自定义项目名称等

第3步: 确认创建成功

在开发者电脑clone创建好的项目,进行开发

git clone git@10.1.1.12:root/auto_build_web.git
cd auto_build_web

开发者要产生ssh空密码密钥对,把公钥添加到gitlab(过程省略)

jenkins安装对应插件

jenkins安装gitlab与gitlab hook插件

添加Jenkins服务器公钥到gitlab

第1步: jenkins产生root用户的ssh空密码密钥对(步骤省略)

添加公钥到gitlab

第2步: 复制gitlab上自动发布项目地址

第3步: 在jenkins服务器上克隆仓库,确认连接OK

git clone git@10.1.1.12:root/auto_build_web.git
Cloning into 'auto_build_web'...
The authenticity of host '10.1.1.12 (10.1.1.12)' can't be established.
ECDSA key fingerprint is SHA256:Sp1FZaHscluT1mTIKFUiFQPoqcsSL2urGiujjlUN4lE.
ECDSA key fingerprint is MD5:8b:95:f9:83:8c:ea:e8:43:e4:58:36:9b:8f:c5:ba:96.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.1.1.12' (ECDSA) to the list of known hosts.
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.

jenkins创建自动构建任务

凭据使用的是上面实验的凭据(如果ssh密钥对重新产生了,就需要重配置凭据)

注意: 执行此脚本不再是使用publish over ssh插件,而是使用jenkins服务器上的jenkins用户来执行的

#!/bin/bash#源目录为jenkins存放任务文件的目录 
SOURCE_DIR=/var/lib/jenkins/workspace/$JOB_NAME/
#目标目录为nginx服务器的家目录
DEST_DIR=/usr/share/nginx/html
#使用rsync同步源到nginx服务器家目录(需要免密登录),IP为nginx服务器IP
/usr/bin/rsync -av --delete $SOURCE_DIR root@10.1.1.14:$DEST_DIR

配置jenkins服务器上的jenkins用户

 grep jenkins /etc/passwd
jenkins:x:988:982:Jenkins Automation Server:/var/lib/jenkins:/bin/falseusermod -s /bin/bash jenkinsgrep jenkins /etc/passwd
jenkins:x:988:982:Jenkins Automation Server:/var/lib/jenkins:/bin/bash
su - jenkins
-bash-4.2$ ssh-keygen -t rsa -C "jenkins user" -N ""-bash-4.2$ ssh-copy-id -i root@10.1.1.14

jenkins全局安全配置

配置gitlab允许本地网络使用webhook

gitlab默认在本地网络不能使用webhook,所以需要我们配置允许(注意要使用管理员配置,普通用户看不到下图的扳手图标)

为gitlab自动构建项目添加webhook

代码自动发布测试

开发者电脑上使用git提交测试文件(确认前面clone过项目仓库)

cd auto_build_web/
echo "auto_build_web" > index.html
git add index.html
git commit -m "add index.html"
git push -u origin master

在nginx服务器上验证

cat /usr/share/nginx/html/index.html 
auto_build_web

总结

http://www.lryc.cn/news/610227.html

相关文章:

  • IntelliJIDEA上传GitHub全攻略
  • JVM学习专题(四)对象创建过程
  • 数据结构:如何判断一个链表中是否存在环(Check for LOOP in Linked List)
  • IDM(Internet Download Manager)是什么?它有什么作用
  • 微帧GPU视频硬编优化引擎:面向人工智能大时代的AI算法与硬编协同优化方案
  • C语言实现Elasticsearch增删改查API
  • 部署 Kibana 8.2.2 可视化管理 Elasticsearch 8.2.2 集群
  • 解决 PS暂存盘已满的五种方法
  • PSOFT Pencil+ 4.25 插件安装教程(适用于 3ds Max 2022-2025)
  • 【c51单片机利用p2口,外接八个流水灯实现流水灯效果1.3.5.7.2.4.6.8亮】2022-10-9
  • MinIO 服务日志与监控实战:日志配置、Webhook、事件通知、Prometheus+Grafana 可视化全流程指南
  • AI 编程学习网站分享:vibe-coding-tutorial
  • SpringCloud相关知识
  • 【测试】⾃动化测试常⽤函数
  • 银河麒麟V10一键安装DM8的脚本及高阶运维SQL分享
  • 力扣-994.腐烂的橘子
  • RHCA02
  • 飞算JavaAI编程插件:以AI之力赋能Java开发,让编码效率再升级
  • 0基礎網站開發技術教學(三) --(後端PHP篇)-- [內有2025最新可用 phpstudy2018下載鏈接]
  • ShowDoc与Docmost对比分析:开源文档管理工具的选择指南
  • numpy基础知识2
  • 《P1462 通往奥格瑞玛的道路》
  • 图的存储方式-邻接表
  • 超急评估:用提前计算分摊性能成本
  • C + +
  • 机器学习(12):拉索回归Lasso
  • Linux环境下(Ubuntu)Fortran语言如何安装配置NetCDF
  • Integer Types Range and varieties
  • QT:交叉编译mysql驱动库
  • MySQL进阶:(第八篇)深入解析InnoDB存储架构