centos里docker安装jenkins
卸载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
点击构建项目
点击构建事件
点击控制台输出
成功
前后端项目就自己配置吧