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
项目手动回滚到上一版本
-
暂无