centos里docker安装jenkins

发布于:2024-11-28 ⋅ 阅读:(15) ⋅ 点赞:(0)

卸载jdk

# 查看CentOS自带JDK是否已安装:
yum list installed | grep java
# 如果存在自带的jdk,删除自带的jdk
yum -y remove java-1.8.0-openjdk*
yum -y remove tzdata-java.noarch

安装

创建目录

mkdir -p /home/soft/jenkins
cd /home/soft/jenkins

创建脚本jenkins.sh

#!/bin/bash

####################################
# @description jenkins运行脚本
# @params $? => 代表上一个命令执行后的退出状态: 0->成功,1->失败
#         $1 => 脚本第一个参数-操作类型(init|start|stop|restart)
# @example => sh jenkins.sh init & source /etc/profile
# @author zhengqingya
# @date 2021/7/17 3:59 下午
####################################


# 在执行过程中若遇到使用了未定义的变量或命令返回值为非零,将直接报错退出
# set -eu

# 检查参数个数
if [ "${#}" -lt 1 ]; then
  echo "\033[41;37m 脚本使用示例: sh jenkins.sh init(初始化环境)|start(运行)|stop(停止)|restart(重启)  \033[0m"
  exit
fi

# SOFT_DIR='/home/soft'

# 获取脚本第一个参数
APP_OPT=${1}
# 端口
APP_PORT=10000
# 名称
APP_NAME=jenkins
# jar名 | war名
APP_JAR=${APP_NAME}.war
# 程序根目录
APP_JAR_HOME=.
# 日志名
APP_LOG_NAME=jenkins
# 日志根目录
APP_LOG_HOME=.
# 程序运行参数
JAVA_OPTS="--ajp13Port=-1 --httpPort=${APP_PORT} --prefix=/jenkins"

echo "本次操作服务名:[${APP_NAME}]"
echo "本次操作选择:[${APP_OPT}]"

# 初始化环境
function init() {
    install_git
    install_jdk
    install_maven
    install_nodejs
    # 使配置生效
    source /etc/profile
}

function install_git() {
  echo "*******************************************************************************"
  echo "            ↓↓↓↓↓↓ [检查环境:git] ↓↓↓↓↓↓         "
  which git
  # $?: 指上一次命令执行的状态 成功:0 失败:1
  if [ "$?" -eq 1 ]; then
    echo "安装git..."
    yum install -y git
  fi
}

function install_jdk() {
    echo "*******************************************************************************"
    echo "            ↓↓↓↓↓↓ [检查环境:java] ↓↓↓↓↓↓         "
    which java
    if [ "$?" -eq 1 ]; then
      echo "安装jdk..."
      yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
      # 配置环境变量 -- 注意$前加上\ 避免shell中获取其变量值追加到配置文件中
cat>> /etc/profile <<EOF

############################## ↓↓↓↓↓↓ set java environment ↓↓↓↓↓↓ #############################
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64
CLASSPATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar:\$JAVA_HOME/jre/lib/rt.jar
PATH=\$PATH:\$JAVA_HOME/bin
export JAVA_HOME CLASSPATH PATH
###############################################################################################

EOF
      # 使配置生效
      . /etc/profile
    fi
}

function install_maven() {
    echo "*******************************************************************************"
    echo "            ↓↓↓↓↓↓ [检查环境:maven] ↓↓↓↓↓↓         "
    which mvn
    if [ "$?" -eq 1 ]; then
      echo "安装maven..."
      mkdir -p /home/soft/maven/repository
      cd /home/soft/maven
#     wget https://mirrors.bfsu.edu.cn/apache/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz
      wget https://mirrors.aliyun.com/apache/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz
      # 解压
      tar -zxvf apache-maven-3.8.8-bin.tar.gz
      # 修改配置文件
      isExist=$(cat /home/soft/maven/apache-maven-3.8.8/conf/settings.xml | grep "<localRepository>/home/soft/maven/repository</localRepository>")
      if [[ "$isExist" == "" ]]
      then
          # 不包含
          # 在第55行插入
          sed -i '55i <localRepository>/home/soft/maven/repository</localRepository>' /home/soft/maven/apache-maven-3.8.8/conf/settings.xml
          # 在第160行插入
          sed -i '160i \
              <!-- 国内中央仓库的配置-阿里云中央仓库 --> \
               <mirror> \
                 <id>aliyun-public</id> \
                 <mirrorOf>*</mirrorOf> \
                 <name>aliyun public</name> \
                 <url>https://maven.aliyun.com/repository/public</url> \
                </mirror> \
                <mirror> \
                 <id>aliyun-central</id> \
                 <mirrorOf>*</mirrorOf> \
                 <name>aliyun central</name> \
                 <url>https://maven.aliyun.com/repository/central</url> \
                </mirror> \
                <mirror> \
                 <id>aliyun-spring</id> \
                 <mirrorOf>*</mirrorOf> \
                 <name>aliyun spring</name> \
                 <url>https://maven.aliyun.com/repository/spring</url> \
                </mirror> \
          ' /home/soft/maven/apache-maven-3.8.8/conf/settings.xml
      fi
      # 配置环境变量
cat>> /etc/profile <<EOF

############################## ↓↓↓↓↓↓ set maven environment ↓↓↓↓↓↓ #############################
MAVEN_HOME=/home/soft/maven/apache-maven-3.8.8
PATH=\$PATH:\$JAVA_HOME/bin:\$MAVEN_HOME/bin
export MAVEN_HOME PATH
################################################################################################

EOF
      # 使配置生效
      source /etc/profile
    fi
}

function install_nodejs() {
    echo "*******************************************************************************"
    echo "            ↓↓↓↓↓↓ [检查环境:NodeJS] ↓↓↓↓↓↓         "
    which npm
    if [ "$?" -eq 1 ]; then
      echo "安装NodeJS..."
      mkdir -p /home/soft/nodejs
      cd /home/soft/nodejs
      wget https://nodejs.org/dist/v16.16.0/node-v16.16.0-linux-x64.tar.xz
      # 解压
      tar -xvf node-v16.16.0-linux-x64.tar.xz
      # 配置环境变量
cat>> /etc/profile <<EOF

############################## ↓↓↓↓↓↓ set nodejs environment ↓↓↓↓↓↓ #############################
NODEJS_HOME=/home/soft/nodejs/node-v16.16.0-linux-x64
PATH=\$PATH:\$NODEJS_HOME/bin
export NODEJS_HOME PATH
#################################################################################################

EOF
      # 使配置生效
      source /etc/profile
      # 将npm软连接到`/usr/bin`目录下 => 解决`sudo: npm:找不到命令`问题
      sudo ln -s /home/soft/nodejs/node-v16.16.0-linux-x64/bin/node /usr/bin/node
      sudo ln -s /home/soft/nodejs/node-v16.16.0-linux-x64/bin/npm /usr/bin/npm
      sudo ln -s /home/soft/nodejs/node-v16.16.0-linux-x64/bin/cnpm /usr/bin/cnpm
      sudo ln -s /home/soft/nodejs/node-v16.16.0-linux-x64/bin/npx /usr/lib/npx
      # 设置淘宝`NPM`镜像
      npm config set registry https://registry.npmmirror.com/
#      npm install pnpm
    fi
}

# 停止
function stop(){
  echo "<-------------------------------------->"
  echo "[${APP_NAME}] ... stop ..."
  # 查看该jar进程
  pid=`ps -ef | grep ${APP_JAR} | grep -v 'grep' | awk '{print $2}'`
  echo "[${APP_NAME}] pid="${pid}
  # 存在则kill,不存在打印一下吧
  if [ "${pid}" ]; then
    kill -9 ${pid}
      # 检查kill是否成功
      if [ "$?" -eq 0 ]; then
          echo "[${APP_NAME}] stop success"
      else
          echo "[${APP_NAME}] stop fail"
      fi
  else
    echo "[${APP_NAME}] 进程不存在"
  fi
}


# 运行
function start(){
  echo "<-------------------------------------->"
  echo "[${APP_NAME}] ... start ..."
  cd ${APP_JAR_HOME}
  echo "当前路径:`pwd`"
  # 赋予可读可写可执行权限
  chmod 777 ${APP_JAR}
  echo "启动命令: nohup java -jar ${APP_JAR} ${JAVA_OPTS} >> ${APP_LOG_HOME}/${APP_NAME}.log 2>&1 &"
  nohup java -jar ${APP_JAR} ${JAVA_OPTS} >> ${APP_LOG_HOME}/${APP_NAME}.log 2>&1 &
  if [ "$?" -eq 0 ]; then
    echo "[${APP_NAME}] start success"
  else
    echo "[${APP_NAME}] start fail"
  fi
}


# 重启
function restart(){
  echo "<-------------------------------------->"
  echo "[${APP_NAME}] ... restart ..."
  stop
  start
}


# 多分支条件判断执行参数
case "${APP_OPT}" in
  "init")
   init
   ;;
  "stop")
   stop
   ;;
  "start")
   start
   ;;
  "restart")
   restart
   ;;
  *)
  echo "\033[41;37m 提示:不支持参数 命令 -> ${APP_OPT} \033[0m"
  ;;
esac

执行脚本

sh jenkins.sh init

如果出现报错

sh-4.2# sh jenkins.sh

jenkins.sh: line 2: $'\r': command not found

jenkins.sh: line 11: $'\r': command not found

jenkins.sh: line 12: $'\r': command not found

jenkins.sh: line 15: $'\r': command not found

jenkins.sh: line 45: syntax error near unexpected token $'{\r''

安装 dos2unix 如果系统中未安装 dos2unix,先安装它,再次执行脚本

yum install -y dos2unix  # CentOS/RHEL
apt-get install -y dos2unix  # Debian/Ubuntu
dos2unix jenkins.sh
sh jenkins.sh init

成功效果如下

安装的jdk目录

由于不同发行版本的linux,yum install安装jdk时,目录版本号可能会变,依照下面截图里的具体目录名称

cd /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.432.b06-2.oc8.x86_64

docker安装jenkins

拉取镜像

docker pull jenkins/jenkins:2.486

创建挂载目录

mkdir -p /home/docker/jenkins
mkdir -p /home/docker/nginx/upload
mkdir -p /home/docker/backend

chmod 777 -R /home/docker/jenkins
chmod 777 -R /home/docker/nginx/upload
chmod 777 -R /home/docker/backend

运行容器

docker run \
-d \
--name jenkins \
-p 8089:8080 \
-p 8880:8888 \
-p 50000:50000 \
-v /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.432.b06-2.oc8.x86_64:/usr/local/jdk8 \
-v /home/soft/maven/apache-maven-3.8.8:/usr/local/maven \
-v /home/soft/maven/repository:/home/soft/maven/repository \
-v /home/soft/nodejs/node-v16.16.0-linux-x64:/usr/local/nodejs \
-v /home/docker/jenkins:/var/jenkins_home \
-v /home/docker/nginx/upload:/home/jenkins/upload \
-v /home/docker/backend:/home/jenkins/backend \
jenkins/jenkins:2.486

访问jenkins

ip:8089

解锁

进入jenkins容器,查看cat /var/jenkins_home/secrets/initialAdminPassword

docker exec -it jenkins /bin/bash
cat /var/jenkins_home/secrets/initialAdminPassword

等待加载初始化

默认推荐插件安装

直接保留admin账户访问

安装插件

插件名称 插件介绍
Maven Integration 构建maven项目插件
Extended Choice Parameter 参数化构建
Git Parameter Git参数化
Publish Over SSH 远程服务器部署(执行操作命令和传输文件)
GitLab GitLab
Email Extension Plugin 电子邮件通知
NodeJS 部署前端
Throttle Concurrent Builds 任务同时build个数控制 (或不使用此插件,直接勾选任务配置中的Do not allow concurrent builds即不允许并发构建)
ThinBackup 备份配置信息
Blue Ocean pipeline 的可视化UI

修改jenkins用户密码

配置jenkins容器环境变量

docker exec -it jenkins /bin/bash 
echo 'export PATH=$PATH:/usr/local/maven/bin:/usr/local/nodejs/bin' >> ~/.bashrc
source ~/.bashrc
#查看path环境变量
echo $PATH

配置jenkins全局工具和配置

先配置全局的maven配置文件settings.xml,文件路径/usr/local/maven/conf/settings.xml

自定义安装jdk,别名随意取,JAVA_HOME为/usr/local/jdk8

jenkins系统配置

勾选上环境变量,配置path的key和value,在jenkins容器使用命令echo $PATH查看

拉到最下面,配置ssh server,便于在jenkins容器里通过ssh,执行宿主机外部的shell命令

点击test

构建项目

新建一个demo,test,free style

git --version
java -version
mvn -v
node -v
npm -v

点击构建项目

点击构建事件

点击控制台输出

成功

前后端项目就自己配置吧