米狗

  • kubernets
  • docker
  • AWS
  • linux
  • nginx
Kratos
  1. 首页
  2. Devops
  3. Jenkins
  4. 正文

中小企业自动化发布-PHP程序自动化部署(第五篇)

2022年9月5日 633点热度 0人点赞 0条评论

PHP程序自动化部署

应用服务器准备

应用服务器提前部署好PHP环境,并定义好用户权限及应用程序目录,不同环境的应用部署应该标准化,应用程序目录、配置文件目录、日志目录等都需保持一致且单独存放,标准化后程序发布代码可以复用,PHP程序不涉及编译打包仅需要将代码下载下来打包,上传服务器解压即可。

应用服务器地址:10.198.40.104

应用程序用户:xshop

应用程序目录:/home/xshop/yzg

配置文件目录(我这里配置文件目录页未标准化,这里是将配置文件单独列出。由于不同环境配置文件不同,程序打包时会将配置文件目录忽略掉):

/home/xshop/yzg/application/admin/config.php

/home/xshop/yzg/application/admin/database.php

/home/xshop/yzg/application/api/config.php

/home/xshop/yzg/application/api/database.php

Ansible配置

登陆ansible服务器配置基础信息,包括应用服务器IP、账号密码及发布脚本等。

创建Inverntory

点击inventory创建test,用于存放test环境内的应用服务器。

创建group

在test inventory创建yzg group,这里的组对应的就是应用系统。

创建host

host对应的应用服务器,有多台输入多个IP地址。

主机与组关联

点击Add host进行主机添加,可以选择已经存在的主机也可以这里直接添加主机,由于我们前期定义了主机,这里选择已经存在的主机进行添加。

创建服务器凭据

点击Crendentials,点击创建凭据。

其中Name字段是后续jenkins发布时候需要使用。

创建Projects

Project是存放发布脚本的地方,支持本地和gitlab多种方式,这里我们使用本地project。

由于是本地存放,需要将在ansible 服务器上创建local目录存放。

按照以下内容输入相关信息即可。

创建Template

Template是存放具体的发布脚本,发布脚本提前写好放置在/var/lib/awx/projects/local下,按照每个应用一个目录存放。

Local目录下创建对应应用程序目录,用于存放发布脚本使用,这里我们创建yzg应用,并将yzg发布脚本上传至该目录,具体如下:

Yzg.yml文件说明:

文件内容如下:

 

---
- hosts: yzg
  serial: 50%
  remote_user: root
  become: yes
  become_user: xshop
  vars:
     app_user: xshop
     app_name: yzg
     app_home: /home/xshop
     backup_home: /home/xshop/backup
     app_dir: /home/xshop
  tasks:
   - name: create backup directory
     file: path={{backup_home}} state=directory  
   - name: backup app
     shell: chdir={{app_dir}} tar -zcvf {{backup_home}}/{{app_name}}_`date '+%Y%m%d%H%M'`.tar.gz {{app_name}}
   - name: rm exprie backupfile
     shell: find {{backup_home}} -name "*.tar.gz" -type f -mtime +90 -exec rm -f {} \;  > /dev/null 2>&1
   - name: copy file 
     copy: src=/release/{{app_name}}/{{app_name}}.zip dest={{app_dir}}/{{app_name}}.zip owner={{app_user}} mode=755
   - name: unzip file
     unarchive: src={{app_dir}}/{{app_name}}.zip dest={{app_dir}} copy=no mode=0755
   - name: rm zip file
     file: path={{app_dir}}/{{app_name}}.zip state=absent

 

按照红色框进行选择和标注,其中蓝色框勾选代表通过传参的方式。

至此ansible的配置完成。

Jenkins配置

Ansible配置完成后,就可以在jenkins上面进行发布程序的配置了,我们通过pipline进行发布,通过改代码的方式完成。

应用目录创建

登陆到jenkins服务器,进入/release目录,创建yzg应用程序目录。

配置节点名称

为节点设置一个标签名称。

创建Job

点击新建job

输入任务名称,任务名称可以按照环境_应用的方式,选择流水线类别。

创建完job,出现如图页面:

切换到流水线标签,将pipline脚本复制进来,具体pipline如下:

pipeline {
agent {node { label 'jenkins-slave1'}}
parameters {
    string(name: 'BRANCH_NAME', defaultValue: "develop", description: '选择分支名称')
    string(name: 'PROJECT', defaultValue: "yzg", description: '项目打包名称')
    string(name: 'GIT_URL', defaultValue: "http://gitlab.i.demo.com/wangdong/driver.git", description: '项目打包名称')
    string(name: 'PACKAGE_DIR', defaultValue: "/release", description: '项目打包名称')
    string(name: 'SOURCE_FILE', defaultValue: "application", description: '项目打包名称')

}

stages {
    stage('获取代码') {
        steps {
            echo "========================开始拉取代码========================"
            git branch: 'develop', credentialsId: 'de61f050-ec46-441a-a756-2496257e6cbd', url: 'http://gitlab.i.demo.com/wangdong/driver.git'
            //git credentialsId: '"${GIT_KEY}"', url: '“${GIT_URL}”'
            echo "代码git地址:" + "${GIT_URL}"
            echo "分支名称:" + "${BRANCH_NAME}"
            echo "========================结束拉取代码========================"
        }
    }
    stage('编译代码') {
        steps {
                echo "========================开始编译代码========================"
                sh label: '', script: '''echo $PATH
                cd ${WORKSPACE}/${PROJECT}/${SOURCE_FILE}/
                rm -fr *
                cd ${WORKSPACE}/
                rm -fr ${WORKSPACE}/${SOURCE_FILE}/admin/config.php
                rm -fr ${WORKSPACE}/${SOURCE_FILE}/admin/database.php
                rm -fr ${WORKSPACE}/${SOURCE_FILE}/api/config.php
                rm -fr ${WORKSPACE}/${SOURCE_FILE}/api/database.php
                mv ${SOURCE_FILE}/* ${PROJECT}/${SOURCE_FILE}/
                zip -r ${PROJECT}.zip ${PROJECT}/'''
                echo "========================结束编译代码========================"
        }
    }
    stage('上传代码') {
        steps {
            echo "========================开始上传代码========================"
            sh label: '', script: '''
            rm -fr ${PACKAGE_DIR}/${PROJECT}/"${PROJECT}".zip
            cd ${WORKSPACE}
            mv ${PROJECT}.zip ${PACKAGE_DIR}/${PROJECT}'''
            echo "========================结束拉取代码========================"
        }
    }
    stage('代码发布') {
        steps {
           echo "========================开始发布========================"
           ansibleTower async: false, credential: 'nuoyifu_test_root', extraVars: '', importTowerLogs: false, importWorkflowChildLogs: false, inventory: 'nuoyifu_test', jobTags: '', jobTemplate: '104', jobType: 'run', limit: '', removeColor: false, scmBranch: '', skipJobTags: '', templateType: 'job', throwExceptionWhenFail: false, towerCredentialsId: 'fd97ab14-7276-4855-879c-7eb680a364f0', towerServer: 'AnsibleTower', verbose: false                    
           echo "========================结束发布========================"
        }
   }       

}

    post {
        success {
            dingtalk (
            robot: 'a3a9e19d-962b-4a69-a327-15fb3a8d1ab2',
            type: 'LINK',
            title: '项目${JOB_BASE_NAME}构建成功',
            text: [
                '项目${JOB_BASE_NAME}在构件编号${BUILD_DISPLAY_NAME}上构建成功,点击查看详细内容。'
            ],
            messageUrl: '${JOB_DISPLAY_URL}',
            picUrl: 'https://www.picdiet.com/img/photographer_compressed.jpg'
            )
        }
    failure {
            dingtalk (
            robot: 'a3a9e19d-962b-4a69-a327-15fb3a8d1ab2',
            type: 'LINK',
            title: '项目${JOB_BASE_NAME}构建失败',
            text: [
                '项目${JOB_BASE_NAME}在构件编号${BUILD_DISPLAY_NAME}上构建失败,点击查看详细内容。'
            ],
            messageUrl: '${JOB_DISPLAY_URL}',
            picUrl: 'https://www.picdiet.com/img/photographer_compressed.jpg'
            )
        }
    }

}

以下内容需要根据实际就行修改

Credential:为ansible tower里面的定义的凭据;

Inventory:为tower里面的环境;

jobTemplate:为改应用发布的job模板id;

towerCredentialsId:为jenkins里面定义的连接ansibletower的凭据,点击右上角admin,左边凭据,可以看到此凭据的id。

ansibleTower async: false, credential: 'nuoyifu_test_root', extraVars: '', importTowerLogs: false, importWorkflowChildLogs: false, inventory: 'test', jobTags: '', jobTemplate: '7', jobType: 'run', limit: '', removeColor: false, scmBranch: '', skipJobTags: '', templateType: 'job', throwExceptionWhenFail: false, towerCredentialsId: 'd506b694-6503-4d8c-940a-6dee405bb6d9', towerServer: 'AnsibleTower', verbose: false

点击保存完成。

点击立即构建进行任务构建。

 

标签: 暂无
最后更新:2022年9月5日

duhongjun

这个人很懒,什么都没留下

点赞
< 上一篇

归档

  • 2024 年 10 月
  • 2024 年 4 月
  • 2024 年 3 月
  • 2024 年 2 月
  • 2024 年 1 月
  • 2023 年 11 月
  • 2023 年 4 月
  • 2023 年 2 月
  • 2023 年 1 月
  • 2022 年 11 月
  • 2022 年 10 月
  • 2022 年 9 月
  • 2022 年 8 月
  • 2021 年 12 月
  • 2021 年 11 月
  • 2021 年 8 月
  • 2021 年 7 月
  • 2021 年 6 月
  • 2021 年 2 月
  • 2020 年 1 月
  • 2019 年 12 月
  • 2019 年 11 月
  • 2019 年 10 月
  • 2019 年 9 月
  • 2019 年 8 月

分类目录

  • AWS
  • docker
  • elasticsearch
  • Jenkins
  • kubernets
  • linux
  • mysql
  • nginx
  • Oracle
  • php
  • redis
  • zabbix
  • 个人
  • 中间件
  • 公有云
  • 大数据
  • 安全工具
  • 微软
  • 操作系统
  • 数据库
  • 未分类
  • 监控
  • 科技
  • 网络技术
  • 资讯
  • 阿里云

COPYRIGHT © 2024 米狗. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

沪ICP备2021019346号-1