基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目

这篇具有很好参考价值的文章主要介绍了基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

案例概述

案例环境

基于 Jenkins+Git+Docker 发布 Java 项目

1、配置 Git 仓库

2、配置 Docker服务器

3、部署镜像仓库

5、配置Jenkins 环境

6、Jenkins 创建项目并发布测试

7、版本回滚

基于Jenkins+Git+Ansible 发布PHP 项目

1、部署PHP 运行环境

2、安装Ansible 插件

3、上传PHP 项目代码到Git仓库

4、Jenkins 创建项目并发布测试


案例概述

在之前的jenkins持续集成章节中主要实现的是jenkins的项目构建及部署。那在本章将结合新项目来实现自动化构建及发布,并将项目打包成镜像上传到私有仓库,来实现一键发布和回滚等操作。

基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

 基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

案例环境

操作系统

IP地址

主机名

角色

CentOS7.5

192.168.50.51

git

Git/Docker registry

CentOS7.5

192.168.50.53

jenkins

Jenkins/Docker

CentOS7.5

192.168.50.54

docker

Docker

基于 Jenkins+Git+Docker 发布 Java 项目

所有主机上操作

[root@git ~]# setenforce 0

[root@git ~]#  iptables -F

[root@git ~]# systemctl stop firewalld

[root@git ~]# systemctl stop NetworkManager

案例需求

开发者将开发完成的代码提交到 Git 代码版本仓库后,点击 Jenkins 任务按钮自动拉取代码编译构建,并自动部署到 Web 服务器,用户可访问最新项目版本。

1、配置 Git 仓库

Git 是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理, 是目前企业中使用最为广泛的代码版本管理系统。

1)使用 yum 安装 Git 并配置

[root@git ~]# yum -y install git
[root@git ~]# useradd git
[root@git ~]# echo "123456" | passwd --stdin git

2)配置 Jenkins 主机免交互拉取 Git 仓库

在 Jenkins 主机上创建密钥对,将 id_rsa.pub 内容追加到 Git 服务器上的 /home/git/.ssh/authorized_keys 文件中。

尽量所有主机互通

ssh-keygen

ssh-copy-id

3)在Git 服务器创建probe版本仓库,一般对Git 的规范的方式要以.git 为后缀。如下:

[root@git ~]#  su - git

上一次登录:五 8月 25 15:09:12 CST 2023从 192.168.50.53pts/2 上

[git@git ~]$ ll

总用量 0

drwxrwxr-x. 7 git git 119 8月  25 13:57 probe.git

[git@git ~]$  cd probe.git

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

重新初始化现存的 Git 版本库于 /home/git/probe.git/

[git@git probe.git]$  exit

登出

4)从Github 拉取开源Java 博客系统psi-probe。

[root@git ~]# git clone https://github.com/psi-probe/psi-probe.git

[root@git ~]# cd psi-probe/

5)移除旧的推送地址,添加新的Git 提交地址。如下:

[root@git psi-probe]# git remote remove origin

[root@git psi-probe]#  git remote add origin git@192.168.50.51:/home/git/probe.git

6)提交代码到Git 仓库并创建Tag。如下:

[root@git psi-probe]#  touch psi-probe-web/src/main/webapp/a.html

[root@git psi-probe]# git add .

[root@git psi-probe]#  git config --global user.email "13933914007@163.com"

[root@git psi-probe]#  git config --global user.name "13933914007"

[root@git psi-probe]# git commit -m "a"

[master fbc21f1] a

 1 file changed, 0 insertions(+), 0 deletions(-)

 create mode 100644 psi-probe-web/src/main/webapp/a.html

7)创建标签

[root@git psi-probe]# git tag 1.0.0

8)推送到Git 服务器。如下:

[root@git psi-probe]#  git push origin 1.0.0

git@192.168.50.51's password:

2、配置 Docker服务器

1)安装Docker,在所有主机上操作

[root@git psi-probe]#  wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

[root@git psi-probe]#  yum -y install yum-utils device-mapper-persistent-data lvm2

[root@git psi-probe]#  yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

[root@git psi-probe]#  yum -y install docker-ce

[root@git psi-probe]#  systemctl start docker

[root@git psi-probe]# systemctl enable docker

Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

[root@git psi-probe]# docker version

2)git主机配置阿里云镜像加速器

[root@git psi-probe]#  cat << END > /etc/docker/daemon.json

> {

>         "registry-mirrors":[ "https://nyakyfun.mirror.aliyuncs.com" ]

> }

> END

[root@git psi-probe]#  systemctl daemon-reload

[root@git psi-probe]#  systemctl restart docker

3、部署镜像仓库

Docker Hub 作为 Docker 默认官方公共仓库;用户如果想自己搭建私有镜像仓库,官方提供了 registry 镜像,使其搭建私有仓库变的非常简单。

1)在git部署docker私有仓库

[root@git psi-probe]# docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry

Unable to find image 'registry:latest' locally

latest: Pulling from library/registry

79e9f2f55bf5: Pull complete

0d96da54f60b: Pull complete

5b27040df4a2: Pull complete

e2ead8259a04: Pull complete

3790aef225b9: Pull complete

Digest: sha256:169211e20e2f2d5d115674681eb79d21a217b296b43374b8e39f97fcf866b375

Status: Downloaded newer image for registry:latest

fe35a0f4ddad47d4e4229e2e07be1adf1a54a89d4f1ef9dc972ae50c0d4033fc

[root@git psi-probe]# docker ps -l

CONTAINER ID   IMAGE      COMMAND                   CREATED         STATUS         PORTS                                       NAMES

fe35a0f4ddad   registry   "/entrypoint.sh /etc…"   4 seconds ago   Up 3 seconds   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   registry

2)测试 registry 可用性

由于 Docker CLI 默认以 HTTPS 访问,而部署的 registry 并未提供 HTTPS,因此,需要 在 pull 镜像的 Docker 主机添加 HTTP 可信任。

Docker和jenkins主机上操作

[root@tomcat ~]# cat /etc/docker/daemon.json

{"insecure-registries":["192.168.50.51:5000"]}

[root@tomcat ~]#  systemctl daemon-reload

[root@tomcat ~]# systemctl restart docker

3)打标签并推送镜像到 registry

[root@docker ~]#  cat centos-7-x86_64.tar.gz | docker import - centos:7

sha256:f5ed290b86299517412d51da339bc680fa385788b396b510043da57447f83a90

[root@docker ~]#  docker tag centos:7 192.168.50.51:5000/centos:7

[root@docker ~]#  docker images

REPOSITORY                  TAG       IMAGE ID       CREATED          SIZE

192.168.50.51:5000/centos   7         f5ed290b8629   21 seconds ago   589MB

centos                      7         f5ed290b8629   21 seconds ago   589MB

[root@docker ~]# docker push 192.168.50.51:5000/centos:7

The push refers to repository [192.168.50.51:5000/centos]

c664eb1dcbf0: Pushed

7: digest: sha256:877b17597fb597ea8a401f7e14b86ac5cf2d818dadfa9786f8f07dcd1fa93d26 size: 529

4)查看 registry 上传的镜像:

[root@docker ~]# curl http://192.168.50.51:5000/v2/_catalog

{"repositories":["centos"]}

[root@docker ~]# curl http://192.168.50.51:5000/v2/centos/tags/list

{"name":"centos","tags":["7"]}

5)从 registry 下载镜像:

[root@docker ~]# docker rmi 192.168.50.51:5000/centos:7

Untagged: 192.168.50.51:5000/centos:7

Untagged: 192.168.50.51:5000/centos@sha256:877b17597fb597ea8a401f7e14b86ac5cf2d818dadfa9786f8f07dcd1fa93d26

[root@docker ~]# docker pull 192.168.50.51:5000/centos:7

7: Pulling from centos

Digest: sha256:877b17597fb597ea8a401f7e14b86ac5cf2d818dadfa9786f8f07dcd1fa93d26

Status: Downloaded newer image for 192.168.50.51:5000/centos:7

192.168.50.51:5000/centos:7

[root@docker ~]# docker images

REPOSITORY                  TAG       IMAGE ID       CREATED         SIZE

192.168.50.51:5000/centos   7         f5ed290b8629   4 minutes ago   589MB

centos                      7         f5ed290b8629   4 minutes ago   589MB

6)构建 Tomcat 基础镜像

在jenkins和docker主机上安装JDK:  如果是跟着上一章做的就不用安装了

[root@docker ~]# tar xf jdk-8u191-linux-x64.tar.gz
[root@docker ~]# mv jdk1.8.0_191/ /usr/local/java

[root@docker ~]# ls -l apache-tomcat-8.5.16.tar.gz

[root@docker ~]# cat Dockerfile

FROM centos:7

MAINTAINER crushlinux

ENV VERSION=8.5.40

ENV JAVA_HOME /usr/local/java

ADD ./apache-tomcat-${VERSION}.tar.gz /tmp

RUN cd /tmp && \

    mv apache-tomcat-${VERSION} /usr/local/tomcat && \

    rm -rf apache-tomcat-${VERSION}.tar.gz /usr/local/tomcat/webapps/* && \

    mkdir /usr/local/tomcat/webapps/ROOT

EXPOSE 8080

CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]

[root@docker ~]# docker build -t 192.168.50.51:5000/tomcat-85  .

[+] Building 0.9s (8/8) FINISHED                                                        docker:default

 => [internal] load .dockerignore                                                                 0.0s

 => => transferring context: 2B                                                                   0.0s

 => [internal] load build definition from Dockerfile                                              0.0s

 => => transferring dockerfile: 481B                                                              0.0s

 => [internal] load metadata for docker.io/library/centos:7                                       0.0s

 => [internal] load build context                                                                 0.1s

 => => transferring context: 9.69MB                                                               0.1s

 => CACHED [1/3] FROM docker.io/library/centos:7                                                  0.0s

 => [2/3] ADD ./apache-tomcat-8.5.40.tar.gz /tmp                                                  0.2s

 => [3/3] RUN cd /tmp &&     mv apache-tomcat-8.5.40 /usr/local/tomcat &&     rm -rf apache-tomc  0.5s

 => exporting to image                                                                            0.1s

 => => exporting layers                                                                           0.1s

 => => writing image sha256:a80be73edf055650e653496c1429f2a290d8a566314e5d8a461f950cc7ab987f      0.0s

 => => naming to 192.168.50.51:5000/tomcat-85                                                     0.0s

[root@docker ~]# docker images

REPOSITORY                     TAG       IMAGE ID       CREATED         SIZE

192.168.50.51:5000/tomcat-85   latest    a80be73edf05   9 seconds ago   612MB

centos                         7         f5ed290b8629   7 minutes ago   589MB

192.168.50.51:5000/centos      7         f5ed290b8629   7 minutes ago   589MB

7)构建镜像并上传到registry:

[root@docker ~]# docker push 192.168.50.51:5000/tomcat-85

Using default tag: latest

The push refers to repository [192.168.50.51:5000/tomcat-85]

39c535c3d2d5: Pushed

1eb2af1ce749: Pushed

c664eb1dcbf0: Mounted from centos

latest: digest: sha256:a885cea844e2b611328a26eeed5b36b150795632534b0e4e75efc8c593ba6b83 size: 952

[root@docker ~]# docker ps -a

CONTAINER ID   IMAGE                            COMMAND                   CREATED         STATUS                        PORTS                                       NAMES

5926243c91f6   192.168.50.51:5000/probe:1.0.0   "/usr/local/tomcat/b…"   2 minutes ago   Up 2 minutes                  0.0.0.0:8090->8080/tcp, :::8090->8080/tcp   probe

5、配置Jenkins 环境

Jenkins 是一个开源软件项目,是基于 Java 开发的一种持续集成工具,用于代码编译、 部署、测试等工作。 Jenkins 也是一个跨平台的集成工具,大多数主流的平台都支持,而且安装很简单,这里将以部署 war 包方式安装。

CSDN过程太多这里有详细安装基础环境配置

1)修改jenkins运行用户

[root@jemkins ~]# vim /usr/lib/systemd/system/jenkins.service

 34 User=root

 35 Group=root

一般在/etc/init.d/jenkins或/usr/lib/systemd/system/jenkins.service。根据不同的Linux发行版可能略有不同,请根据实际情况进行查找。

2)Jenkins 配置全局工具配置

配置 Maven、JDK、Git 环境

在 Jenkins 首页中点击“Manage Jenkins”->“Global Tool Configuration”->“JDK” ->新增“JDK”,设置 JDK 别名为”JDK17”。去掉“Install automatically”选项,设置 “JAVA_HOME”为本案例中 JDK 实际安装路径。

基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

 在Jenkins安装maven

[root@jemkins ~]#  tar xf apache-maven-3.5.0-bin.tar.gz
[root@jemkins ~]# mv apache-maven-3.5.0 /usr/local/maven-3.5.0
[root@jemkins ~]# vim /usr/local/maven-3.5.0/conf/settings.xml

146   <mirrors>
147     <mirror>
148         <id>nexus-aliyun</id>
149         <mirrorOf>central</mirrorOf>
150         <name>Nexus aliyun</name>
151         <url>http://maven.aliyun.com/nexus/content/groups/public</url>
152     </mirror>
153   </mirrors>

基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维 刚刚界面中找到 Maven 配置选项,然后点击“新增 Maven”并设置别名为“Maven3.5”。

基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

以上全局基本配置完毕后,点击保存即可完成。

配置SSH 插件

创建一个用于连接Docker主机的凭据。主页面-> 凭据-> 系统-> 全局凭据-> 添加凭据。

基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

 输入连接Docker 主机的用户名和密码

基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

 基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

第二步:添加SSH 远程主机。Manage Jenkins-> Configure System。最下面

 基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

6、Jenkins 创建项目并发布测试

  1. 主页面-> 新建Item-> 输入任务名称,构建一个Maven 项目
  2. 基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

注意:如果没有显示“构建一个Maven 项目”选项,需要在管理插件里安装“Maven

Integration”插件。

  1. 配置Git 参数化构建
  2. 基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

 3)动态获取Git 仓库tag,与用户交互选择Tag 发布

 基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

4)指定项目Git 仓库地址

5)修改*/master 为$Tag,Tag 是上面动态获取的变量名,表示根据用户选择打代码版本

 基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

6)设置maven 构建命令选项“clean package -Dmaven.test.skip=true”

 基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

7)利用pom.xml 文件构建项目。在Jenkins 本机镜像构建与推送到镜像仓库,并SSH远程连接到Docker 主机使用推送的镜像创建容器

选择Post Steps –>Add post-build step ->执行shell,这样会调出第一个输入框

如果没有就去下ssh插件

 基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

选择Post Steps –>Execute shell script on remote host using ssh,这样会调出第二个输入框。

 基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

 第一个命令框内容

REPOSITORY=192.168.50.51:5000/probe:${tag}

# 构建镜像

cat > Dockerfile << EOF

FROM 192.168.50.51:5000/tomcat-85:latest

RUN rm -rf /usr/local/tomcat/webapps/ROOT

COPY psi-probe-web/target/*.war /usr/local/tomcat/webapps/ROOT.war

CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]

EOF

docker build -t $REPOSITORY ./

# 上传镜像

docker push $REPOSITORY

第二个命令框内容

REPOSITORY=192.168.50.51:5000/probe:${tag}

# 部署

docker rm -f probe |true

docker images rm $REPOSITORY|true

docker container run -d --name probe -v /usr/local/java:/usr/local/java -p 8090:8080 $REPOSITORY

[root@docker ~]# vim /etc/docker/daemon.json
{"insecure-registries":["192.16850.51:5000"]}
[root@docker ~]# systemctl daemon-reload
[root@docker ~]# systemctl restart docker

注意:从部署命令当中可以看到最后一行容器名称是probe,暴露宿主机端口8090,即使用宿主机IP:8090 就可以访问probe项目。

8)probe项目已配置完成,开始构建

9)选择tag,开始构建。

 基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

 10)在任务控制台输出构建日志的开始信息

在任务控制台输出构建日志的结束信息

基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

 11)执行成功后,浏览器访问测试probe项目:http://192.168.50.54:8090。基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

7、版本回滚

回滚(Rollback)指的是程序或数据处理错误,将程序或数据恢复到上一次正确版本。回滚包括程序回滚和数据回滚等类型。对于本章而言,如果当前代码版本发布失败,回滚到上一个正常版本,尽快恢复业务。

回滚思路:重新run 指定老版本镜像。因为在每次发版过程中需要将代码封装到镜像中,并打上Tag,以此用来区分不同的版本。比如在发版过程中出现代码问题,需要运维工程师快速回滚到上一个版本,这样可以做到快速恢复业务正常化。同样这个过程该怎样去实现呢?此时,可以重新创建一个”自由软件项目风格任务“,通过参数化构建特定版本,也就是指定上一个正常版本镜像,然后重新执行创建容器命令即可回到之前正常的版本。

提交1.0.1版本代码

[root@git psi-probe]# echo "test1" > psi-probe-web/src/main/webapp/test1.html

[root@git psi-probe]# git add .

[root@git psi-probe]# git commit -m "test1"

[master 61bc58b] test1

 1 file changed, 1 insertion(+)

 create mode 100644 psi-probe-web/src/main/webapp/test1.html

[root@git psi-probe]# git tag 1.0.1

[root@git psi-probe]# git push origin 1.0.1

git@192.168.50.51's password:

Counting objects: 12, done.

Delta compression using up to 2 threads.

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

Writing objects: 100% (7/7), 575 bytes | 0 bytes/s, done.

Total 7 (delta 2), reused 0 (delta 0)

To git@192.168.50.51:/home/git/probe.git

 * [new tag]         1.0.1 -> 1.0.1

提交1.0.2版本代码

[root@git psi-probe]#  echo "test2" > psi-probe-web/src/main/webapp/test2.html

[root@git psi-probe]# git add .

[root@git psi-probe]# git commit -m "test2"

[master a588d47] test2

 1 file changed, 1 insertion(+)

 create mode 100644 psi-probe-web/src/main/webapp/test2.html

[root@git psi-probe]# git tag 1.0.2

[root@git psi-probe]# git push origin 1.0.2

git@192.168.50.51's password:

Counting objects: 12, done.

Delta compression using up to 2 threads.

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

Writing objects: 100% (7/7), 576 bytes | 0 bytes/s, done.

Total 7 (delta 2), reused 0 (delta 0)

To git@192.168.50.51:/home/git/probe.git

 * [new tag]         1.0.2 -> 1.0.2

发布1.0.1版本

基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

查看

[root@14af7248a99a /]#  ls /usr/local/tomcat/webapps/ROOT

META-INF  WEB-INF  a.html  css  flags  index.jsp  js  test1.html

[root@14af7248a99a /]# [root@docker psi-probe]#

1) 创建一个自由软件项目风格任务

基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

 基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

 基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

 基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

REPOSITORY=192.168.50.51:5000/probe:${tag}

# 部署

docker rm -f probe |true

docker container run -d --name probe -v /usr/local/java:/usr/local/java -p 8090:8080 $REPOSITORY

回滚到1.0.0版本

基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

 基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

[root@docker psi-probe]# docker exec -it probe /bin/bash

查看

[root@afc103977891 /]#  ls /usr/local/tomcat/webapps/ROOT

META-INF  WEB-INF  a.html  css  flags  index.jsp  js

[root@docker psi-probe]#  docker ps -l

CONTAINER ID   IMAGE                            COMMAND                   CREATED          STATUS          PORTS                                       NAMES

afc103977891   192.168.50.51:5000/probe:1.0.0   "/usr/local/tomcat/b…"   36 seconds ago   Up 35 seconds   0.0.0.0:8090->8080/tcp, :::8090->8080/tcp   probe

基于Jenkins+Git+Ansible 发布PHP 项目

1、部署PHP 运行环境

PHP 是一个动态程序,负责解析PHP-FPM 服务,而这个服务不支持静态页面处理,一般结合Nginx 解决这个问题。Nginx 本身是一个静态Web 服务器,并不支持解析PHP 程序,但它支持了FastCGI 接口来调用动态服务来解析PHP 程序。

当客户端请求PHP 页面时,Nginx 通过fastcgi 接口转发给本地9000 端口的PHP-FPM子进程处理,处理完成后返回Nginx。

1)安装Nginx

配置Nginx 网络源

[root@docker psi-probe]#  vim /etc/yum.repos.d/nginx.repo

[nginx]

name=nginx repo

baseurl=http://nginx.org/packages/centos/7/$basearch/

gpgcheck=0

enabled=1

~            

安装并启动

[root@docker bak]#  yum -y install nginx

[root@docker bak]#  systemctl start nginx

2)安装PHP

安装php 依赖的第三方库,命令如下:

[root@docker bak]# yum -y install gd-devel libxml2-devel libcurl-devel libjpeg-devel libpng-devel gcc openssl-*

编译安装php

[root@docker ~]#  tar xf php-5.6.39.tar.gz -C /usr/src/

[root@docker ~]# cd /usr/src/php-5.6.39/

[root@docker php-5.6.39]#  ./configure --prefix=/usr/local/php \

> --with-config-file-path=/usr/local/php/etc \

> --with-mysql --with-mysqli --with-openssl --with-zlib \

> --with-curl --with-gd --with-jpeg-dir --with-png-dir \

> --with-iconv --enable-fpm --enable-zip --enable-mbstring && make -j 2 && make install

配置php-fpm,命令如下:

[root@docker php-5.6.39]#  cp php.ini-production /usr/local/php/etc/php.ini

[root@docker php-5.6.39]#  cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

[root@docker php-5.6.39]#  vim /usr/local/php/etc/php-fpm.conf

149 user = nginx

150 group = nginx

[root@docker php-5.6.39]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

[root@docker php-5.6.39]# chmod +x /etc/rc.d/init.d/php-fpm

[root@docker php-5.6.39]#  service php-fpm start

Starting php-fpm  done

3)Nginx 代理PHP

添加虚拟主机配置如下:

[root@docker php-5.6.39]#  vim /etc/nginx/conf.d/default.conf

server {

    listen       80;

    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {

        root   /usr/share/nginx/html;

        index  index.html index.htm index.php;

    }

    location ~ \.php$ {

        root /usr/share/nginx/html;

        fastcgi_pass 127.0.0.1:9000;

        fastcgi_index index.php;

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        include fastcgi_params;

}

[root@docker php-5.6.39]# systemctl restart nginx

2、安装Ansible 插件

1)主页面-> 系统管理->管理插件

基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

 基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

 3) 点击”直接安装”按钮。只安装Ansible 插件是不行的,还要在Jenkins 主机上安装ansible:

[root@jemkins ~]# yum -y install ansible

[root@jemkins yum.repos.d]#  vim /etc/ansible/hosts

 20  [webservers]

 21 192.168.50.54

其中: [webserver]表示Web 主机分组名称,该分组下可以写多个主机,也可以写多个分组区分不同角色服务器。

3、上传PHP 项目代码到Git仓库

1)在Git 服务器创建wordpress 版本仓库

[root@git ~]#  su - git

上一次登录:日 8月 27 18:31:05 CST 2023pts/0 上

[git@git ~]$ mkdir wordpress.git

[git@git ~]$ cd wordpress.git

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

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

[git@git wordpress.git]$ exit

登出

2)下载开源PHP 博客系统wordpress

[root@git ~]# wget https://wordpress.org/latest.tar.gz

[root@git ~]#  tar xf latest.tar.gz

[root@git ~]# cd wordpress/

3)提交到Git 仓库

[root@git wordpress]#  git init

初始化空的 Git 版本库于 /root/wordpress/.git/

[root@git wordpress]# git remote add origin git@192.168.50.51:/home/git/wordpress.git

[root@git wordpress]# git add .

[root@git wordpress]#  git commit -m "wp"

 [root@git wordpress]# git tag 1.0.0

[root@git wordpress]# git push origin 1.0.0

git@192.168.50.51's password:

Counting objects: 3171, done.

Delta compression using up to 2 threads.

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

Writing objects: 100% (3171/3171), 19.79 MiB | 11.52 MiB/s, done.

Total 3171 (delta 410), reused 0 (delta 0)

To git@192.168.50.51:/home/git/wordpress.git

 * [new tag]         1.0.0 -> 1.0.0

4、Jenkins 创建项目并发布测试

1)主页面-> 新建任务-> 创建一个自由软件项目风格任务

基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

2)动态获取Git 仓库tag,与用户交互选择Tag 发布, 

 基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

 3)修改*/master 为$tag。tag 是上面动态获取的变量名,指定项目Git 仓库地址。基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

 基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

4)使用ansible 插件,选择Invoke Ansible Ad-Hoc Command 

 基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

5)使用synchronize 模块同步数据

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

创建两个

基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

 6)使用raw模块校正项目权限基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

 还是做号ssh互通

[root@git wordpress]# ssh 192.168.50.54

Last login: Sun Aug 27 14:54:04 2023 from 192.168.50.1

[root@docker ~]# exit

登出

Connection to 192.168.50.54 closed.

7)主页面-> 右击blog-wordpress -> Build with Parameters

基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

 基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

 基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

安装rsync命令。因为Ansible synchronize模块底层使用rsync命令来进行文件同步,所以需要在目标主机上安装rsync 

 sudo yum  update && sudo yum install -y rsync

 突然发现显示版本过低  不过不影响实验完整度

基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

 10)模拟实际生产环境提交代码,作用是可以清楚看到两次发版代码的不同。

[root@git ~]#  cd wordpress/
[root@git wordpress]# echo "Hello Wordpress" > test.html

11)将修改的test.html 提交到Git 仓库
[root@git wordpress]#  git add .
[root@git wordpress]# git commit -m "hw"
[master c3bc26e] hw
 1 file changed, 1 insertion(+)
 create mode 100644 test.html
[root@git wordpress]# git tag 1.0.1
[root@git wordpress]# git push origin 1.0.1
git@192.168.50.51's password:
Counting objects: 4, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 270 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@192.168.50.51:/home/git/wordpress.git
 * [new tag]         1.0.1 -> 1.0.1

 12)在Jenkins 执行构建任务

基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

发布成功后,访问: http://192.168.50.54/blog-wordpress/test.html,页面显示“Hello Wordpress!”。说明刚修改的代码已发布成功!

基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目,jenkins,运维

 拜拜。。。。文章来源地址https://www.toymoban.com/news/detail-776279.html

到了这里,关于基于Jenkins CICD的代码发布与回滚 Jenkins+Git+Docker 发布 Java 项目 Jenkins+Git+Ansible 发布PHP 项目的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HBase中的数据版本控制与回滚策略

    HBase是一个分布式、可扩展、高性能的列式存储系统,基于Google的Bigtable设计。它广泛应用于大规模数据存储和处理,如日志记录、实时数据分析、时间序列数据等。在HBase中,数据版本控制和回滚策略是非常重要的,因为它们直接影响数据的一致性、可靠性和可用性。 在本文

    2024年02月21日
    浏览(35)
  • jenkins实践篇(2)—— 自动打tag的可回滚发布模式

    大家好,我是蓝胖子,在上一篇我简单介绍了如何基于特定分支做自动编译和发布,在生产环境中,为了更加安全和快速回滚,我采取的是通过对代码打tag的方式来进行部署,下面我将详细介绍整个发布过程的逻辑。 正常功能发布时,是基于master分支发布的,所以我在成功发

    2024年02月06日
    浏览(29)
  • 基于Jenkins的CICD

    已安装docker并设置为开机自启 已安装Docker-Compose 基于docker安装Jenkins jenkins官网 编写docker-compose.yml文件 首次启动会因为数据卷data目录没有权限导致启动失败,设置data目录写权限(/usr/local/docker/jenkins_docker/data) 启动jenkins 在/usr/local/docker/jenkins_docker目录下执行 访问地址 账号密码

    2024年04月22日
    浏览(51)
  • 持续集成(CICD)- Jenkins+Git+gogs综合实战(笔记一)

    目录续集---- 下面内容见:持续集成(CICD)- Jenkins+Git+gogs综合实战(笔记二) 七、拉取代码 方法一:直接填写命令进行拉取(不建议用这种) 方法二:使用源码管理拉取代码 步骤一:确认环境(检查自己是否有Git插件) 步骤二:构建项目时对项目的源码管理选择 Git 步骤三

    2024年03月12日
    浏览(48)
  • 【Redis】Redis事务:原子性与回滚的真相揭秘

    大家好,我是mep。今天一起来探讨一下Redis缓存的问题,SpringBoot如何集成Redis网上文章很多,基本都是介绍如何配置redisTemplate,如何调用,本文就不过多介绍了。这次我们研究的是:Redis的事务。 首先抛出一个问题,Redis支持事务吗?     答案肯定是 支持 ,不然也不需要我

    2024年02月08日
    浏览(43)
  • 实战:Docker+Jenkins+Gitee构建CICD流水线

    持续集成和持续交付一直是当下流行的开发运维方式,CICD省去了大量的运维时间,也能够提高开发者代码集成规范。开发者在开发完需求功能后可以直接提交到gitee,然后jenkins直接进行代码编译和一体化流水线部署。通过流水线部署可以极大的提高devops效率,也是企业信息自

    2024年02月14日
    浏览(55)
  • Docker+Jenkins(blueocean)+Gitee构建CICD流水线实战

    vim /etc/profile export JAVA_HOME=/home/jdk/jdk1.8.0_301 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin source /etc/profile vim /etc/profile export MAVEN_HOME=/home/maven/apache-maven-3.8.6 export PATH=$PATH:$MAVEN_HOME/bin source /etc/profile docker pull jenkinsci/blue

    2024年02月11日
    浏览(81)
  • Gitlab+Jenkins+Docker+Harbor+K8s集群搭建CICD平台(持续集成部署Hexo博客Demo)

    目录 涉及内容: 一、CICD服务器环境搭建 1、docker 环境安装 (1)、拉取镜像,启动并设置开机自启 (2)、配置docker加速器 2、安装并配置GitLab (1)、创建共享卷目录 (2)、创建 gitlab 容器 (3)、关闭容器修改配置文件 (4)、修改完配置文件之后。直接启动容器 (5)、相关

    2024年03月15日
    浏览(74)
  • 回滚git merge,即回滚某次merge的代码

    1、情景描述: 已经git merge 合并后的代码,想要回滚到merge前的代码。 如下: 上一次提交id是 a31c85425,merge进来的提交id是 fe8644392,当前提交id是77ae9627e704431684c9cd663b792bd38a702ce8 想要实现:回滚当前merge,保留上一次提交id。 2、实现命令: 其中 【commit_id】 表示 需要回滚的当

    2024年02月15日
    浏览(56)
  • git 回滚代码

    在Git中,回滚代码有多种方式,其中常用的方法是使用 git revert 或 git reset 命令。 使用 git revert 命令可以创建一个新的提交来撤销之前的提交。这个新的提交将包含与要回滚的提交相反的更改。使用这种方法可以保留先前提交的记录。 例如,如果要撤消最新的提交,可以使用

    2024年02月14日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包