> 文档中心 > CentOS+Jenkins+Gitea+宝塔环境搭建 实现自动化部署

CentOS+Jenkins+Gitea+宝塔环境搭建 实现自动化部署


CentOS+Jenkins + Gitea+宝塔 实现CI/CD

一、安装最新版 Jenkins

1、安装 JAVA JDK

yum -y install java [root@ecs-487c-0002 ~]# java -versionopenjdk version "1.8.0_302"OpenJDK Runtime Environment (build 1.8.0_302-b08)OpenJDK 64-Bit Server VM (build 25.302-b08, mixed mode)

2、安装 Jenkins

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.reposudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.keysudo yum upgradesudo yum install epel-release java-11-openjdk-develsudo yum install jenkinssudo systemctl daemon-reload
  • 查看 jenkins 安装了哪些文件

[root@ecs-487c-0002 ~]# rpm -ql jenkins/etc/init.d/jenkins/etc/logrotate.d/jenkins/etc/sysconfig/jenkins/usr/lib/jenkins/usr/lib/jenkins/jenkins.war/usr/sbin/rcjenkins/var/cache/jenkins/var/lib/jenkins/var/log/jenkins

3、启动,重启,关闭 Jenkins

systemctl start jenkinssystemctl restart jenkinssystemctl stop jenkins# 查看是否启动netstat -tlnpActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address    Foreign Address  StatePID/Program name    tcp 0      0 0.0.0.0:800.0.0.0:* LISTEN      997/nginx: master p tcp 0      0 127.0.0.1:8082   0.0.0.0:* LISTEN      2702/sidekiq 5.2.9  tcp 0      0 127.0.0.1:9236   0.0.0.0:* LISTEN      2564/gitaly  tcp 0      0 0.0.0.0:220.0.0.0:* LISTEN      2345/sshd    tcp 0      0 127.0.0.1:25     0.0.0.0:* LISTEN      2124/master  tcp60      0 :::3306   :::*      LISTEN      2113/mysqld  tcp60      0 :::8080   :::*      LISTEN      4269/java# 就是他    tcp60      0 ::1:9168  :::*      LISTEN      2452/ruby    tcp60      0 :::22     :::*      LISTEN      2345/sshd    tcp60      0 ::1:25    :::*      LISTEN      2124/master

二、配置 Jenkins

# 通过 http://ip:8080 访问# 第一次访问的时候会有一个重置密码界面,我们按照他的要求进行即可。cat /var/lib/jenkins/secrets/initialAdminPassword[root@localhost ~]# cat /var/lib/jenkins/secrets/initialAdminPasswordf1c4be908d4b49c894d884a00e4fa34d[root@localhost ~]# # 查看的结果直接复制输入进去。# 创建一个用户。 admin 123456# 自主选择插件安装。如果默认为英文# 登录用户之后--> 系统管理-->插件管理--> 搜索 --> Localization: Chinese (Simplified)# 安装完成之后执行重启命令systemctl restart jenkins

三、安装 maven

yum -y install  maven[root@ecs-487c-0002 ~]# mvn --versionApache Maven 3.5.4 (Red Hat 3.5.4-5)Maven home: /usr/share/mavenJava version: 1.8.0_302, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el8_4.x86_64/jreDefault locale: en_US, platform encoding: UTF-8OS name: "linux", version: "4.18.0-240.10.1.el8_3.x86_64", arch: "amd64", family: "unix"

四、Jenkins 系统配置

# 添加jdk# 登录到Jenkins管理后台,点击 Manage Jenkins --> Global Tool Configuration# 点击 新增jdk# Install automatically 前面的勾选,去掉# 输入别名和JAVA_HOME# 别名: openjdk# JAVA_HOME : /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el8_4.x86_64/jre# 通过 mvn --version 查看得到 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el8_4.x86_64/jre  去掉 jre 填写到上面 JAVA_HOME 上# 添加maven# 点击新增Maven# Install automatically 前面的勾选,去掉# 输入name和MAVEN_HOME# name: maven# MAVEN_HOME: /usr/share/maven# 注意:使用 mvn -version 命令,就可以看到Maven home变量# MAVEN_HOME 输入框下面,不要有警告或者错误信息,否则就是路径不正确。
  • 主要配置参数如上获取,实际操作

在这里插入图片描述

在这里插入图片描述

五、Jenkins 安装插件

  • Localization: Chinese (Simplified):Jenkins Core 及其插件的简体中文语言包

  • Git:用于集成项目版本控制软件,根据需要选择

  • Git Parameter Plug-In:查看插件站点上的Git 参数获取更多信息。

  • SSH server:远程服务器

  • Publish Over SSH:远程服务器部署构建

  • NodeJS Plugin:nodejs插件

  • Gitea Plugin:gitea插件

  • 以下插件暂时没用到

  • Phing/Ant:使用Phing或Apache Ant 对PHP项目做自动化构建

  • CheckStyle:使用PHP CodeSniffer进行代码风格检查的工具。用于检查PHP代码是否有违反一组预先设置好的编码标准的一个PEAR包,内置了ZEND,PEAR的编码风格规则

  • Clover PHP:使用phpunit进行单元测试的工具,可以被xdebug扩展用来生成代码覆盖率报告,并且可以与phing集成来自动测试,还可以和Selenium整合来完成大型自动化集成测试

  • DRY:使用PHPCPD(php copy paste detector)来发现项目中的重复代码

  • HTML Publisher:用来发布phpunit代码覆盖率报告

  • JDepend:使用PHP Depend分析php中静态代码,用来检查项目中的代码规模和复杂程度

  • Plot:使用phploc来统计php项目规模大小的工具,可以统计php的项目代码行数

  • PMD:使用phpmd(php mess dector),对基于pdepend的结果进行分析,一旦项目超过了pdepend中各具体指标的规定,将发出警告信息.

  • Violations:按照代码缺陷严重性集中显示pwd静态代码分析的结果

  • xUnit:使用JUnit的格式来输出phpunit的日志文件

六、Jenkins 全局安全配置

在这里插入图片描述

可以不需要开启授权访问,因为这样匿名用户可以看到任务的脚本 信息,里面有敏感信息,容易造成泄漏。建议将权限关闭,只允许登录的账号进行查看。这样远程触发的时候,需要在指定角色里面生成对应的 API TOKEN 进行远程进行触发。在 GIT 仓库添加 webhook 设置触发地址为 http://ip:port/buildByToken/build?job=jobName&token=token

ip:port 可以是域名,也可以是 ip:portjobName 定义任务的名称,建议是英文token即对应用户的api token

在这里插入图片描述

七、Jenkins 凭据配置

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

八、Jenkins 视图

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

九、构建

1、jenkins构建权限问题

  • 修改jenkins配置

检查jenkins配置配置文件,将执行用户改成root,不然后面可能出现执行shell没有权限

vim /etc/sysconfig/jenkins # 编辑文件JENKINS_USER="root" # 改成root
  • 修改jenkins的用户与组

cd /var/libchown -R root:root jenkin0s# 重启jenkins服务systemctl restart jenkins

2、Jenkins 本地部署

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 使用到的脚本代码

# 打包备份当前运行的版本if [ -d ${WORKSPACE} ]; then    # 判断是部署在哪台服务器    if [ $SERVER = 'Develop' ]; then echo "部署在本机"     fi    # 查看是否存在.env配置文件    #if [ ! -f "${WORKSPACE}/.env" ]; then # cd ${WORKSPACE} && \ # \cp -rf .env.example .env echo -e "${ENV_CONFIG}" > "${WORKSPACE}/.env"    #fi    # 进入目录,执行项目安装    cd ${WORKSPACE} && \    chown -R www:www * && \    chmod -R 755 * && \    composer install    # 判断是否有数据迁移    if [ -d "${WORKSPACE}/database" ]; then php think migrate:run    fi    # 特殊配置清单fi
  • 最终效果

在这里插入图片描述

在这里插入图片描述

3、构建用到的 Jenkins 环境变量

JOB_DISPLAY_URL == http://1*.*.*.64:8080/job/crm/display/redirectRUN_DISPLAY_URL == http://1*.*.*.64:8080/job/crm/65/display/redirectRUN_ARTIFACTS_DISPLAY_URL == http://1*.*.*.64:8080/job/crm/65/display/redirect?page=artifactsRUN_CHANGES_DISPLAY_URL == http://1*.*.*.64:8080/job/crm/65/display/redirect?page=changesRUN_TESTS_DISPLAY_URL == http://1*.*.*.64:8080/job/crm/65/display/redirect?page=testsCI == trueBUILD_NUMBER == 65BUILD_ID == 65BUILD_DISPLAY_NAME == #65JOB_NAME == crmJOB_BASE_NAME == crmBUILD_TAG == jenkins-crm-65EXECUTOR_NUMBER == 0NODE_NAME == built-inNODE_LABELS == built-inWORKSPACE == /var/lib/jenkins/jobs/crm/workspaceWORKSPACE_TMP == /var/lib/jenkins/jobs/crm/workspace@tmpJENKINS_HOME == /var/lib/jenkinsJENKINS_URL == http://1*.*.*.64:8080/BUILD_URL == http://1*.*.*.64:8080/job/crm/65/JOB_URL == http://1*.*.*.64:8080/job/crm/GIT_COMMIT == 4e09e5b1fe9ae0b7ae0018997dd4370caf4a327bGIT_PREVIOUS_COMMIT == 4e09e5b1fe9ae0b7ae0018997dd4370caf4a327bGIT_PREVIOUS_SUCCESSFUL_COMMIT == 4e09e5b1fe9ae0b7ae0018997dd4370caf4a327bGIT_BRANCH == origin/devGIT_LOCAL_BRANCH == GIT_CHECKOUT_DIR == GIT_URL == http://域名/orico_f2b211/orico_crm_apiGIT_COMMITTER_NAME == GIT_AUTHOR_NAME == GIT_COMMITTER_EMAIL == GIT_AUTHOR_EMAIL == SVN_REVISION == SVN_URL == 

十、配置gitea 项目自动集成自动部署

所有公共配置参数需要写入到公共配置文件里面。env .env.stage

# 需要全部从代码里面脱离出来数据库配置信息密钥单点配置信息ERP配置信息账号密码redis配置信息mycat配置信息邮件配置信息支付配置信息……
如果开发在开发中增加了公共配置信息,则需要对应配置的正式服信息提交到Jenkins的部署脚本里面

1、PHP 项目自动部署(自动部署不能和参数化部署同时使用一个任务,暂时没研究出

  • 添加触发远程构建 (例如,使用脚本)

在这里插入图片描述

  • 配置好 JenKins 后,转到代码仓库,进行触发

在这里插入图片描述

  • 如果需要在 URL 后面添加额外的参数话,需要给相应权限

  • 远程构建脚本

# 打包备份当前运行的版本function main() {    USER=yulinzhihou    PASS=sinall0    PROJECT_DIR=/www/wwwroot/orico_crm_api    GIT_REPO=http://${USER}:${PASS}@git.f2b211.com/orico_f2b211/orico_crm_api.git    if [ -d $PROJECT_DIR ]; then # 拉取代码 # 先设置密钥 cd ${PROJECT_DIR} && \ git checkout -f && \ git pull origin dev --rebase # 特殊配置清单    else git clone ${GIT_REPO} $PROJECT_DIR if [ $? -eq 0 ]; then     # 切换分支     cd ${PROJECT_DIR} && \     git checkout dev fi    fi    # 查看是否存在.env配置文件    if [ ! -f "${PROJECT_DIR}/.env" ]; then cat > "${PROJECT_DIR}/.env" <<EOFAPP_DEBUG = true[APP]DEFAULT_TIMEZONE = Asia/Shanghai[DATABASE]TYPE = mysqlHOSTNAME = 127.0.0.1DATABASE = orico_crmUSERNAME = rootPASSWORD = sinall0HOSTPORT = 3306CHARSET = utf8DEBUG = truePREFIX = crm_[LANG]default_lang = zh-cn[JWT_CONFIG]ISS = OPSEXP = 604800[REDIS]HOST=127.0.0.1PORT=6379PASS=orico@f2b211SELECT=0[PRIVILEGES]ONE="教练"TWO="团长"THREE="业务员"EOF    fi    # 进入目录,执行项目安装    cd ${PROJECT_DIR} && \    git checkout -f && \    composer install -q && \    chown -R www:www * && \    chmod -R 755 * # 判断是否有数据迁移    if [ -d "${PROJECT_DIR}/database" ]; then php think migrate:run    fi}main

2、PHP 项目手动本地打包

  • 编写构建脚本,见 Jenkins 本地部署

3、PHP 项目手动回滚到上一版本

  • 待更新

4、VUE 项目自动部署

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 相关部署脚本

# 打包备份当前运行的版本function main() {    # 账号    USER=yulinzhihou    # 密码    PASS=sinall0    # 项目目录    PROJECT_DIR=/www/wwwroot/dev.crm.f2b211.com    # 拉取代码的链接    GIT_REPO=http://${USER}:${PASS}@git.f2b211.com/orico_f2b211/orico_crm_front.git    if [ -d $PROJECT_DIR ]; then cd ${PROJECT_DIR} && \ git checkout -f && \ git pull origin dev --rebase # 特殊配置清单    else git clone ${GIT_REPO} $PROJECT_DIR if [ $? -eq 0 ]; then     # 切换分支     git checkout dev fi    fi    # 查看是否存在.env配置文件    if [ ! -f "${PROJECT_DIR}/.env.staging" ]; then cd ${PROJECT_DIR} && \     # 测试服配置    cat > ${PROJECT_DIR}/.env.staging <<EOF# just a flagENV = 'development'# 接口版权VUE_APP_API_VERSION = 'v1'# 接口URLVUE_APP_BASE_API = 'http://dev.crm.api.f2b211.com'# sso请求URLVUE_APP_SSO_BASEURL = 'http://dev.uc.f2b211.com/uc/'VUE_APP_SSO_LOGINURL = "http://dev.uc.f2b211.com/uc/user/login.html"# sso appidVUE_APP_SSO_APPID = 'F9723218ACC3EB86F6505381759AA0D3'VUE_CLI_BABEL_TRANSPILE_MODULES = trueEOF    fi    cd ${PROJECT_DIR} && \    chown -R www:www * && \    chmod -R 777 * && \    npm install --registry=https://registry.npm.taobao.org && \    # 进入目录,执行项目安装    npm run build:stage    if [  $? -eq 0 ]; then echo -e "构建成功-"`date '+%Y-%m-%d-%H-%M-%S'`    fi}main

5、VUE 项目手动打包部署

  • 配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 最终效果

在这里插入图片描述
在这里插入图片描述

6、VUE 项目手动回滚到上一版本

  • 暂无