Jenkins
JAVA
JDK
yum -y install java
[root@ecs-487c-0002 ~]# java -version
openjdk 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)
Jenkins
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
sudo yum upgrade
sudo yum install epel-release java-11-openjdk-devel
sudo yum install jenkins
sudo systemctl daemon-reload
[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
Jenkins
systemctl start jenkins
systemctl restart jenkins
systemctl stop jenkins
# 查看是否启动
netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.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:22 0.0.0.0:* LISTEN 2345/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2124/master
tcp6 0 0 :::3306 :::* LISTEN 2113/mysqld
tcp6 0 0 :::8080 :::* LISTEN 4269/java # 就是他
tcp6 0 0 ::1:9168 :::* LISTEN 2452/ruby
tcp6 0 0 :::22 :::* LISTEN 2345/sshd
tcp6 0 0 ::1:25 :::* LISTEN 2124/master
Jenkins
# 通过 http://ip:8080 访问
# 第一次访问的时候会有一个重置密码界面,我们按照他的要求进行即可。
cat /var/lib/jenkins/secrets/initialAdminPassword
[root@localhost ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
f1c4be908d4b49c894d884a00e4fa34d
[root@localhost ~]#
# 查看的结果直接复制输入进去。
# 创建一个用户。 admin 123456
# 自主选择插件安装。如果默认为英文
# 登录用户之后--> 系统管理-->插件管理--> 搜索 --> Localization: Chinese (Simplified)
# 安装完成之后执行重启命令
systemctl restart jenkins
maven
yum -y install maven
[root@ecs-487c-0002 ~]# mvn --version
Apache Maven 3.5.4 (Red Hat 3.5.4-5)
Maven home: /usr/share/maven
Java 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/jre
Default locale: en_US, platform encoding: UTF-8
OS 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:port
jobName 定义任务的名称,建议是英文
token 即对应用户的api token
Jenkins
凭据配置Jenkins
视图检查jenkins配置配置文件,将执行用户改成root,不然后面可能出现执行shell没有权限
vim /etc/sysconfig/jenkins # 编辑文件
JENKINS_USER="root" # 改成root
cd /var/lib
chown -R root:root jenkin0s
# 重启jenkins服务
systemctl restart jenkins
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
Jenkins
环境变量JOB_DISPLAY_URL == http://1*.*.*.64:8080/job/crm/display/redirect
RUN_DISPLAY_URL == http://1*.*.*.64:8080/job/crm/65/display/redirect
RUN_ARTIFACTS_DISPLAY_URL == http://1*.*.*.64:8080/job/crm/65/display/redirect?page=artifacts
RUN_CHANGES_DISPLAY_URL == http://1*.*.*.64:8080/job/crm/65/display/redirect?page=changes
RUN_TESTS_DISPLAY_URL == http://1*.*.*.64:8080/job/crm/65/display/redirect?page=tests
CI == true
BUILD_NUMBER == 65
BUILD_ID == 65
BUILD_DISPLAY_NAME == #65
JOB_NAME == crm
JOB_BASE_NAME == crm
BUILD_TAG == jenkins-crm-65
EXECUTOR_NUMBER == 0
NODE_NAME == built-in
NODE_LABELS == built-in
WORKSPACE == /var/lib/jenkins/jobs/crm/workspace
WORKSPACE_TMP == /var/lib/jenkins/jobs/crm/workspace@tmp
JENKINS_HOME == /var/lib/jenkins
JENKINS_URL == http://1*.*.*.64:8080/
BUILD_URL == http://1*.*.*.64:8080/job/crm/65/
JOB_URL == http://1*.*.*.64:8080/job/crm/
GIT_COMMIT == 4e09e5b1fe9ae0b7ae0018997dd4370caf4a327b
GIT_PREVIOUS_COMMIT == 4e09e5b1fe9ae0b7ae0018997dd4370caf4a327b
GIT_PREVIOUS_SUCCESSFUL_COMMIT == 4e09e5b1fe9ae0b7ae0018997dd4370caf4a327b
GIT_BRANCH == origin/dev
GIT_LOCAL_BRANCH ==
GIT_CHECKOUT_DIR ==
GIT_URL == http://域名/orico_f2b211/orico_crm_api
GIT_COMMITTER_NAME ==
GIT_AUTHOR_NAME ==
GIT_COMMITTER_EMAIL ==
GIT_AUTHOR_EMAIL ==
SVN_REVISION ==
SVN_URL ==
gitea
项目自动集成自动部署所有公共配置参数需要写入到公共配置文件里面。env .env.stage
# 需要全部从代码里面脱离出来
数据库配置信息
密钥
单点配置信息
ERP配置信息
账号密码
redis配置信息
mycat配置信息
邮件配置信息
支付配置信息
……
如果开发在开发中增加了公共配置信息,则需要对应配置的正式服信息提交到Jenkins的部署脚本里面
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" <<EOF
APP_DEBUG = true
[APP]
DEFAULT_TIMEZONE = Asia/Shanghai
[DATABASE]
TYPE = mysql
HOSTNAME = 127.0.0.1
DATABASE = orico_crm
USERNAME = root
PASSWORD = sinall0
HOSTPORT = 3306
CHARSET = utf8
DEBUG = true
PREFIX = crm_
[LANG]
default_lang = zh-cn
[JWT_CONFIG]
ISS = OPS
EXP = 604800
[REDIS]
HOST=127.0.0.1
PORT=6379
PASS=orico@f2b211
SELECT=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
PHP
项目手动本地打包Jenkins
本地部署PHP
项目手动回滚到上一版本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 flag
ENV = 'development'
# 接口版权
VUE_APP_API_VERSION = 'v1'
# 接口URL
VUE_APP_BASE_API = 'http://dev.crm.api.f2b211.com'
# sso请求URL
VUE_APP_SSO_BASEURL = 'http://dev.uc.f2b211.com/uc/'
VUE_APP_SSO_LOGINURL = "http://dev.uc.f2b211.com/uc/user/login.html"
# sso appid
VUE_APP_SSO_APPID = 'F9723218ACC3EB86F6505381759AA0D3'
VUE_CLI_BABEL_TRANSPILE_MODULES = true
EOF
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
VUE
项目手动打包部署VUE
项目手动回滚到上一版本