centos7 安装Jenkins
rpm安装方式:
清华源地址
https://mirrors.tuna.tsinghua.edu.cn/jenkins/opensuse/
1.通过 yum install Jenkins的rpm包名 命令进行安装
2.自动安装完成之后:
/usr/lib/jenkins/jenkins.war WAR包
/etc/sysconfig/jenkins 配置文件
/var/lib/jenkins/ 默认的JENKINS_HOME目录
/var/log/jenkins/jenkins.log Jenkins日志文件
3.修改配置文件,添加JDK路径
vim /etc/init.d/jenkins " 编辑Jenkins配置文件,添加jdk的Java路径 后缀加 /bin/java
4.启动jenkins
systemctl start jenkins
5.修改jenkins的插件源地址
/var/lib/jenkins/hudson.model.UpdateCenter.xml 为以下地址
http://mirror.xmission.com/jenkins/updates/update-center.json
6.修改插件下载地址
/var/lib/jenkins/updates/default.json
- 把 “ www.google.com ” 改成 “ http://www.baidu.com/ ”
- 全局搜索 “ updates.jenkins.io/download ” 替换成 “mirrors.tuna.tsinghua.edu.cn/jenkins ”
docker方式安装
- docker内maven下载不下来,映射为本机maven.
docker run -u root -d -p 8080:8080 -p 50000:50000 -v /usr/jenkins:/var/jenkins_home -v /usr/maven/apache-maven-3.6.3:/usr/local/maven -v /var/run/docker.sock:/var/run/docker.sock --name myjenkisn jenkinsci/blueocean
- 用科学上网方式 下载maven,不映射本机maven
docker run -u root -d -p 8080:8080 -p 50000:50000 -v /usr/jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean
- 解决下载插件慢得问题
- 修改 hudson.model.UpdateCenter.xml
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
- 修改 updates/default.json
updates.jenkins.io/download 改为 mirrors.tuna.tsinghua.edu.cn/jenkins
www.google.com 改为 www.baidu.com
方式二
$ sed -i 's#http://updates.jenkins.io/download#https://mirrors.tuna.tsinghua.edu.cn/jenkins#g' default.json && sed -i 's#http://www.google.com#https://www.baidu.com#g' default.json
-
安装中文插件
Localization: Chinese (Simplified) -
安装maven插件
Maven Integration -
shell脚本 打包应用为docker容器
#!/bin/bash -il
#操作/项目路径(Dockerfile存放的路劲)
BASE_PATH=/var/jenkins_home/base
#jar备份路径
BACKUP_PATH=/var/jenkins_home/backup_jar
# 源jar路径
SOURCE_PATH=/var/jenkins_home/workspace/maven
#docker 镜像/容器名字或者jar名字 这里都命名为这个
SERVER_NAME=jeecg-boot-module-system
#jar包名字
JAR_NAME=jeecg-boot-module-system-2.2.1.jar
#容器id
CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')
#镜像id
IID=$(docker images | grep "$SERVER_NAME" | awk '{print $3}')
DATE=`date +%Y%m%d%H%M`
# 最新构建代码 移动到项目环境
function transfer(){
echo "最新构建代码 $SOURCE_PATH/$SERVER_NAME/target/$JAR_NAME 迁移至 $BASE_PATH ...."
cp $SOURCE_PATH/$SERVER_NAME/target/$JAR_NAME $BASE_PATH
cp $SOURCE_PATH/$SERVER_NAME/Dockerfile $BASE_PATH
echo "迁移完成"
}
# 备份
#function backup(){
# if [ -f "$BASE_PATH/$SERVER_NAME.jar" ]; then
# echo "$SERVER_NAME.jar 备份..."
# cp $BASE_PATH/$SERVER_NAME.jar $BASE_PATH/backup/$SERVER_NAME-$DATE.jar
# echo "备份 $SERVER_NAME.jar 完成"
# else
# echo "$BASE_PATH/$SERVER_NAME.jar不存在,跳过备份"
# fi
#}
# 构建docker镜像
function build(){
if [ -n "$IID" ]; then
echo "存在$SERVER_NAME镜像,IID=$IID,删除后重新构建"
docker stop $SERVER_NAME
docker rm $SERVER_NAME
docker rmi $SERVER_NAME
cd $BASE_PATH
docker build -t $SERVER_NAME .
else
echo "不存在$SERVER_NAME镜像,开始构建镜像"
cd $BASE_PATH
docker build -t $SERVER_NAME .
fi
}
# 运行docker容器
function run(){
backup
transfer
build
if [ -n "$CID" ]; then
echo "存在$SERVER_NAME容器,CID=$CID,删除docker容器 ..."
docker stop $SERVER_NAME
docker rm $SERVER_NAME
echo "$SERVER_NAME容器删除完成"
echo "重新创建容器"
docker run --name $SERVER_NAME -d -p 8081:8081 $SERVER_NAME
echo "$SERVER_NAME容器创建完成"
else
echo "不存在$SERVER_NAME容器,docker run创建容器..."
docker run --name $SERVER_NAME -d -p 8081:8081 $SERVER_NAME
echo "$SERVER_NAME容器创建完成"
fi
}
#入口
run
- 推送到远程服务器启动jar包的脚本
#!/bin/bash
source /etc/profile
#jar所在目录
JAR_PATH=/usr/local/jar
#jar名称
JAR_NAME=demo-0.0.1-SNAPSHOT
#结束进程
echo "查询进程id-->$JAR_NAME"
PID=`ps -ef | grep "$JAR_NAME" | grep -v grep | awk '{print $2}'`
echo "得到进程ID:$PID"
for id in $PID
do
kill -9 $id
done
echo "结束进程完成"
#运行jar
nohup java -jar $JAR_PATH/$JAR_NAME.jar > $JAR_PATH/$JAR_NAME.out 2>1&
- 安装dockerCompose
curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
- 安装gitlab
docker run \
--detach \
--publish 8443:443 \
--publish 8090:8090 \
--publish 222:22 \
--restart always \
--name gitlab --privileged=true \
--restart unless-stopped \
-v /usr/gitlab/etc:/etc/gitlab \
-v /usr/gitlab/log:/var/log/gitlab \
-v /usr/gitlab/data:/var/opt/gitlab \
beginor/gitlab-ce:11.0.1-ce.0
- pipeline 脚本
pipeline {
agent any
triggers {
gitlab (
triggerOnPush: true, # 当 GitLab 触发 push 事件时,是否执行构建
triggerOnMergeRequest: true, # 当 GitLab 触发 mergeRequest 事件时,是否执行构建
branchFilterType: 'All', # 只有符合条件的分支才会触发构建
secretToken: "abc"
)
}
stages {
stage('build') {
steps {
echo "hello world"
}
}
}
}
微服务docker部署方案
- pipeline脚本
def tag="latest"
//harbor私服地址
def harbor="registry.cn-hangzhou.aliyuncs.com"
//harbor仓库名
def harbor_name="haiwei"
//项目名
def project_name="jeecg-boot-module-system"
node {
stage('拉取代码') {
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '73456497-af92-4c1a-8d09-b2b8a62b3ad5', url: 'https://gitee.com/jfb308398254/jenkins-test.git']]])
}
stage('编译,构建镜像'){
def imageName="${project_name}:${tag}"
//编译
sh '''
source /etc/profile
mvn clean package dockerfile:build
'''
//给镜像打标签
sh "docker tag ${imageName} ${harbor}/${harbor_name}/${imageName}"
//屏蔽掉阿里得账号密码 使用脚本生成器里得(withCredentials: Bind credentials to variables)
withCredentials([usernamePassword(credentialsId: '014654bc-394f-40ef-bf6f-f6d76e2addfe', passwordVariable: 'passward', usernameVariable: 'username')]) {
//登录 阿里镜像
sh "docker login -u ${username} -p ${passward} ${harbor}"
//上传镜像
sh "docker push ${harbor}/${harbor_name}/${imageName}"
}
//删除本地镜像
sh "docker rmi -f ${imageName}"
sh "docker rmi -f ${harbor}/${harbor_name}/${imageName}"
//部署 可以在脚本生成里面选择(sshPublisher: Send build artifacts over SSH)
//必须安装 Publish Over SSH 插件
sshPublisher(publishers: [sshPublisherDesc(configName: '部署服务器', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "/usr/local/shell/deploy.sh $harbor $harbor_name $project_name $tag 9091", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
}
}
- 有远程部署服务器脚本
#! /bin/sh
#接收外部参数
harbor_url=$1
harbor_project_name=$2
project_name=$3
tag=$4
port=$5
imageName=$harbor_url/$harbor_project_name/$project_name:$tag
echo "$imageName"
#查询容器是否存在,存在则删除
containerId=`docker ps -a | grep -w ${project_name}:${tag} | awk '{print $1}'`
if [ "$containerId" != "" ] ; then
#停掉容器
docker stop $containerId
#删除容器
docker rm $containerId
echo "成功删除容器"
fi
#查询镜像是否存在,存在则删除
imageId=`docker images | grep -w $project_name | awk '{print $3}'`
if [ "$imageId" != "" ] ; then
#删除镜像
docker rmi -f $imageId
echo "成功删除镜像"
fi
# 登录Harbor私服
docker login -u 308398254@qq.com -p jfb308398 $harbor_url
# 下载镜像
docker pull $imageName
# 启动容器
docker run -di -p $port:$port $imageName
echo "容器启动成功"