Docker安装Jenkins 并通过容器部署项目访问(2)

210 阅读21分钟

上篇可参考:juejin.cn/post/686853…

开始我们的jenkins之旅!

配置shell脚本

打开项目配置找到构建环境

配置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

**转发->在看->点赞->收藏->评论!!!**是对我最大的支持!