由网络副手--寻路人于2022.05.18 00:23:00发布在工具类,企业技术支持 七、搭建jenkins 代码发布平台 阅读1349 评论0 喜欢0 ##一、前言 公司代码仓库搭建完毕了,现在要通过代码代码发布平台来降低小伙伴们代码发布流程. ##二、安装前准备环境 ### 2.1 基础物料 centos 7 、 JAVA8 ### 2.2 OracleJDK 安装 ``` #JDK下载首页 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html #JDK8历史版本 https://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html jdk8u131: wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz 百度云: 链接:https://pan.baidu.com/s/1vlCbdVmjKi9gL0Hb6O28Lg 提取码:rnad sudo mkdir -p /usr/java sudo tar zvxf jdk-8u131-linux-x64.tar.gz -C /usr/java ##配置环境变量 vi /etc/profile # 在export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL下添加 export JAVA_HOME=/usr/java/jdk1.8.0_131 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH #保存后 source /etc/profile #检查是否配置成功 java -version ``` ### 2.3 OpenJDK部署 ``` yum install -y java-1.8.0-openjdk ##检查 java -version ``` ##三、搭建jenkins ###3.1 环境 CentOS 7、Jenkins2.121.2 JDK 1.8.0_181 Nginx ###3.2 安装jenkins ``` #添加Yum源 sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo #导入密钥 sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key sudo yum install -y jenkins ``` ###3.3 端口 和 配置 ``` sudo firewall-cmd --add-port=9600/tcp --permanent sudo firewall-cmd --reload 如果更换配置端口: 配置文件: /etc/sysconfig/jenkins 实际为:端口修改 /usr/lib/systemd/system/jenkins.service 让服务生效 sudo systemctl daemon-reload vim /usr/lib/firewalld/services/jenkins.xml 修改解析端口 sudo systemctl restart jenkins ``` ### 3.4 配置Java可选路径 ``` #修改jenkins启动脚本 sudo vi /etc/init.d/jenkins #修改candidates增加java可选路径:/usr/java/jdk1.8.0_131/bin/java candidates=" /etc/alternatives/java /usr/lib/jvm/java-1.8.0/bin/java /usr/lib/jvm/jre-1.8.0/bin/java /usr/lib/jvm/java-1.7.0/bin/java /usr/lib/jvm/jre-1.7.0/bin/java /usr/bin/java /usr/java/jdk1.8.0_131/bin/java ``` ### 3.5 配置开机启动 ``` #重载服务(由于前面修改了Jenkins启动脚本) sudo systemctl daemon-reload #启动Jenkins服务 sudo systemctl start jenkins #将Jenkins服务设置为开机启动 #由于Jenkins不是Native Service,所以需要用chkconfig命令而不是systemctl命令 sudo /sbin/chkconfig jenkins on ``` ### 3.6 配置Nginx 转发 ``` server { listen 80; server_name jenkins.xxxx.vip; charset utf-8; access_log /logs/nginx/jenkins.xxxx.vip_access.log wwwlogs; error_log /logs/nginx/jenkins.xxxx.vip_error.log error; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:9600; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } #重启 sudo nginx -s reload ``` ### 3.7 错误集锦 #### 3.7.1 如果不配置SELinux,通过Nginx反向代理访问,可能会产如下错误 ``` #查看错误信息 /var/log/nginx/jenkins.error.log #错误信息示例 connect() to 127.0.0.1:8001 failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1 ------------ 解决方案: 方法1:setsebool -P httpd_can_network_connect 1 方法2:关闭SELinux: sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config #重启: reboot ``` ##三、 安装后系统配置 ###3.1 查询root账号默认密码 ``` cat /var/lib/jenkins/secrets/initialAdminPassword 快速一路默认进入系统,添加管理账户 ``` ###3.2 配置业务视图,先看配置成功的效果  这里代码发布环境分了三个环境: 测试环境、仿真环境、生产环境 测试环境 ---根据分支 build 仿真环境、生产环境 ---用代码tag ------------ 1、新建任务 ---> 自由风格  这块是生产--通过tag 参数构建来设置的  这里是测试环境不通过tag --通过分支进行构建    ### 3.3 GO 语言构建的脚本 ``` date_time=`date +%Y%m%d\-%H%M%S` project_name="project-app" supervisor_service_name="golang-api-xxxx-server" #环境设置 app_env=online log_path="/rd_www/logs/$project_name" project_path="/rd_www/$project_name" out_file_name="${project_name}-${date_time}" jenkins_conf_path="/home/wuser/shell_sys/muse_conf/" project_conf_path="/rd_www/muse_conf/" #Create GOPATH export GOROOT=/usr/local/go export GOPATH=/jenkins_go_www export GOBIN=$GOROOT/bin:$GOPATH/bin export GO111MODULE=on export GOPROXY=https://goproxy.cn,direct export PATH=$GOPATH:$GOBIN BUILD_OUT_PATH="$GOPATH/${out_file_name}" cd $WORKSPACE/$project_name go mod tidy #移除老项目代码 /bin/rm -rf $GOPATH/${project_name}-* GOOS=linux GOARCH=amd64 go build -o $BUILD_OUT_PATH source /home/wuser/shell_sys/jenkins_server_lists_cnf.sh for ip in ${online_server[@]} do #创建基础需要路径 /usr/bin/ssh wuser@$ip "mkdir -p ${log_path}; mkdir -p ${project_path};" #文件传输 /usr/bin/scp $BUILD_OUT_PATH wuser@$ip:$project_path /usr/bin/rsync -avzP --progress -e "/usr/bin/ssh" ${jenkins_conf_path} wuser@$ip:${project_conf_path} #执行软链接重新链接 /usr/bin/ssh wuser@$ip "cd $project_path; rm -f ${project_name}; ln -s ${out_file_name} ${project_name};" /usr/bin/ssh wuser@$ip "sudo supervisorctl restart ${supervisor_service_name}" #重启服务 #pid=$(/usr/bin/ssh wuser@$ip "ps -ef|grep ${project_name}|grep -v grep | grep -v tail |awk '{print \$2}'") #if [ "$pid" ] #then # echo "正在kill进程" # /usr/bin/ssh wuser@$ip "sudo kill -2 $pid" #else # echo "没有进程需要kill" #fi #启动服务 #/usr/bin/ssh wuser@$ip "cd ${project_path}; APP_ENV=$app_env logs_path=$log_path nohup ./${project_name} 2> ${log_path}/api_log2.out 1> ${log_path}/api_log1.out &" #采用supervisor 启动服务 #检查服务是否正常 pid=$(/usr/bin/ssh wuser@$ip "ps -ef|grep ${project_name}|grep -v grep|awk '{print \$2}'") if [ "$pid" ] then echo "$ip--服务启动---成功~~~" else echo "$ip--服务启动---失败~~~o(╥﹏╥)o" exit 1 fi done /bin/python3 /home/wuser/shell_sys/deploy_webhook_notice.py $JOB_URL $JOB_NAME $BUILD_NUMBER ${build_with_tag} $BUILD_USER ``` ### 3.4 其中 /home/wuser/shell_sys/jenkins_server_lists_cnf.sh 配置 ``` #!/bin/bash test_server=(10.17.12.54) beta_server=(10.17.176.1) online_server=( 10.17.176.2 10.17.176.3 ... ) ``` ### 3.3 前端-VUE 语言构建的脚本 ``` date_time=`date +%Y%m%d\-%H%M%S` project_name="h5-xxxx-vip" out_file_name="${project_name}-${date_time}" out_build_tar="${out_file_name}.tar.gz" project_path="/fe_www/$project_name" cd $WORKSPACE rm -rf project_name* /usr/bin/npm config set registry https://registry.npmmirror.com /usr/bin/npm install /usr/bin/npm run build:prod -- --dest="$out_file_name" if [ ! -d "$out_file_name" ]; then echo "编译打包失败" fi #微信证书输出 /bin/echo "n2R16Fa4TKa3bT2a" > $out_file_name/TKa3bT2a.txt tar -czf $out_build_tar $out_file_name source /home/wuser/shell_sys/jenkins_server_lists_cnf.sh for ip in ${online_server[@]} do #创建基础需要路径 /usr/bin/ssh wuser@$ip "mkdir -p ${project_path}; sudo chmod 777 ${project_path}; sudo chown www:www ${project_path};" /usr/bin/rsync -avzP --progress -e "/usr/bin/ssh" $out_build_tar wuser@$ip:${project_path} #执行软链接重新链接 /usr/bin/ssh wuser@$ip "cd $project_path; sudo tar -xzf $out_build_tar; sudo rm -f ${project_name}; sudo chown -R www:www ${out_file_name}; ln -s ${out_file_name} ${project_name}; ls -la ${project_name}" #IOS 和 APP迁移之前,先手工代码发布 #/usr/bin/ssh wuser@$ip "sudo -u www rm -f /fe_www/h5-xxxx-vip/h5-xxxx-vip/ios; sudo -u www ln -s /fe_www/ios-h5-xxxx-vip/ios-h5-xxxx-vip $project_path/${project_name}/ios; sudo -u www rm -f /fe_www/h5-xxxx-vip/h5-xxxx-vip/app; sudo -u www ln -s /fe_www/andorid-h5-xxxx-vip/andorid-h5-xxxx-vip $project_path/${project_name}/app;" done /bin/python3 /home/wuser/shell_sys/deploy_webhook_notice.py $JOB_URL $JOB_NAME $BUILD_NUMBER ${build_with_tag} $BUILD_USER ``` ###3.4 权限配置控制视图访问 #### 3.4.1 【插件】 Manage and Assign Roles 权限策略插件,需要安装   #### 3.4.2 [插件] GIT #### 3.4.3 【插件】build-user-vars-plugin 变量 #### 3.4.4 【插件】Git Parameter 用于代码发布用Tag 标签 赞 0 分享 赏 您可以选择一种方式赞助本站 支付宝扫码赞助 BraveDu 署名: 网络副手~寻路人