打开项目配置找到构建环境
配置shell脚本
Docker配置
运行shell脚本全部都是在容器中执行,所以我们要映射于宿主机的Docker并设置权限 -u root。以免创建镜像没权限。我们进入到jenkins内部。
docker exec -it 容器 /bin/bash
cd /var/jenkins_home
我们新建一个文件夹用于放Dockerfile文件
mkdir service
vi Dockerfile
编写Dockerfile内容
FROM openjdk:8
ADD springboot-jenkins-0.0.1-SNAPSHOT.jar /springboot-jenkins
WORKDIR /var/jenkins_jome/service
ADD springboot-jenkins-0.0.1-SNAPSHOT.jar /springboot-jenkins.jar
RUN bash -c 'touch /springboot-jenkins.jar'
ENTRYPOINT ["java","-Djava.security.egd-file:/dev/./urandom","-jar","-Xmx1024m","-Xms1024m","/springboot-jenkins.jar"]
这样就可以了。。
接着就是贴我们的shell脚本
BASE_PATH=/var/jenkins_home/service
SOURCE_PATH=/var/jenkins_home/workspace/springboot-jenkins/target
SERVER_NAME=springboot-jenkins
JAR_NAME=springboot-jenkins-0.0.1-SNAPSHOT
#容器id
CID=$(docker ps -a | grep "$SERVER_NAME" | awk '{print $1}')
#镜像id
IID=$(docker images -a | grep "$SERVER_NAME" | awk '{print $3}')
DATE=`date +%Y%m%d%H%M`
function transfer(){
echo "最新构建代码 $SOURCE_PATH/$JAR_NAME.jar 迁移至 $BASE_PATH ...."
cp $SOURCE_PATH/$JAR_NAME.jar $BASE_PATH/
ls $BASE_PATH/
echo "transfer SUCCESS"
}
function backup(){
if [ -f "$BASE_PATH/$JAR_NAME.jar" ]; then
echo "$JAR_NAME.jar BEIFEN..."
cp $BASE_PATH/$JAR_NAME.jar $BASE_PATH/backup/$SERVER_NAME-$DATE.jar
echo "BEIFEN $JAR_NAME.jar -> SUCCESS"
else
echo "$BASE_PATH/$SERVER_NAME.jar -> not find"
fi
}
# 构建docker镜像
function build(){
if [ -n "$IID" ]; then
echo "CUNZAI $SERVER_NAME,IID=$IID,DELETE OR BUILD"
docker rmi $IID
echo "DELETE OK"
cd $BASE_PATH
docker build -t $SERVER_NAME .
else
echo "BUCUNZAI $SERVER_NAME ,BEGIN BUILD"
cd $BASE_PATH
docker build -t $SERVER_NAME .
fi
}
# 运行docker容器
function run(){
echo "perform backup ..."
backup
echo "perform transfer ..."
transfer
echo "perform build ..."
build
echo "docker run ..."
if [ -n "$CID" ]; then
echo "CUNZAI $SERVER_NAME,CID=$CID,STOP THE DELETE OR BUILD"
docker stop $CID
docker rm $CID
docker run --name $SERVER_NAME -v $BASE_PATH:$BASE_PATH -d -p 9098:9098 $SERVER_NAME
echo "$SERVER_NAME容器RESTART SUCCESS"
else
echo "NO EXIST $SERVER_NAME容器,docker run..."
docker run --name $SERVER_NAME -v $BASE_PATH:$BASE_PATH -d -p 9098:9098 $SERVER_NAME
echo "$SERVER_NAME容器ERROR"
fi
}
#入口
run
容器运行命令
Docker映射至容器
-
-v /var/run/docker.sock
-
-v usr/bin/docker
docker run -d --name jenkins -p 8090:8080 -p 50000:50000 -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker -v /usr/local/jenkins:/var/jenkins_home -u root jenkins/jenkins:2.222.3-centos