# Docker安装Jenkins
- 拉取Jenkins镜像
docker pull jenkins/jenkins:lts
- 新建挂载目录
mkdir -p ~/jenkins_home
- 修改权限
chown -R 1000 /root/jenkins_home
- 启动容器
docker run -di \ --name=jenkins \ -p 8080:8080 \ -v /root/jenkins_home/:/var/jenkins_home \ -v /opt/software/jdk1.8.0_181:/opt/software/jdk1.8.0_181 \ -v /opt/software/apache-maven-3.8.6:/opt/software/apache-maven-3.8.6 \ -v $(which docker):/usr/bin/docker \ -v /var/run/docker.sock:/var/run/docker.sock \ jenkins/jenkins:lts
1
2
3
4
5
6
7
8
9
挂载jenkins_home
-v /root/jenkins_home/:/var/jenkins_home
挂载宿主机的java环境/opt/software/jdk1.8.0_181:/opt/software/jdk1.8.0_181
挂载宿主机的maven环境-v /opt/software/apache-maven-3.8.6:/opt/software/apache-maven-3.8.6
挂载宿主机的Docker,Jenkis可以使用Docker了-v $(which docker):/usr/bin/docker
-v /var/run/docker.sock:/var/run/docker.sock
- 页面初始化,插件安装等等
参考,不得不说,人家写的真好,必须点赞 (opens new window)
Jenkins
持续集成
自动化打包、部署、发布
✔️开发本地开发完成
✔️提交代码到Git仓库(gitlab、gitee、github)
✔️Jenkins监听是否有提交
✔️Jenkins拉取Git仓库代码到Jenkins工作目录
✔️Jenkins调用Maven打包,编译等
✔️Jenkins制作Docker镜像
✔️Jenkins上传镜像到镜像库,如Harbor
✔️Jenkins通过SSH登录应用服务器
✔️Jenkins拉取镜像
✔️Jenkins通过运行镜像
✔️Jenkins控制每个应用服务器都启动容器
✔️Jenkins发布完成
所以有了jenkins之后,开发只需要关注开发代码,然后提交就行了。剩下的操作全都交给jenkins处理
DockerCompose
- 编写
docker-compose.yml
version: '3.8'
services:
ufs-jenkins:
image: jenkinsci/blueocean
container_name: jenkins
restart: always
user: root
ports:
- "8080:8080"
- "50000:50000"
volumes:
- ./jenkins/jenkins_home:/var/jenkins_home
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock
2
3
4
5
6
7
8
9
10
11
12
13
14
在
./jenkins/jenkins_home
目录配置maven的阿里源 setting.xml登录xx:8080配置Jenkins
- 初始密码,通过
docker logs ufs-jenkins
获取 - 安装插件
Docker Pipeline
- 初始密码,通过
准备一个项目,提交到Gitee
项目根目录创建Dockerfile
FROM openjdk:8-jre-alpine # 将当前目录下的jar包复制到docker容器的/目录下 COPY target/*.jar /app.jar # 运行过程中创建一个xx.jar文件 RUN touch /app.jar; ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=file:/dev/./urandom" ENV PARAMS="" # 声明服务运行在8080端口 EXPOSE 8080 # 指定docker容器启动时运行jar包 ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -jar /app.jar $PARAMS" ]
1
2
3
4
5
6
7
8
9
10
11
12
13项目根目录创建Jenkinsfile
pipeline{ agent any environment { WS = "${WORKSPACE}" IMAGE_NAME = "java-devops-demo" } //定义流水线的加工流程 stages { //流水线的所有阶段 stage('1.环境检查'){ steps { sh 'pwd && ls -alh' sh 'printenv' sh 'docker version' sh 'java -version' sh 'git --version' } } stage('2.编译'){ agent { docker { image 'maven:3-alpine' args '-v maven-repository:/root/.m2' } } steps { sh 'pwd && ls -alh' sh 'mvn -v' sh 'cd ${WS} && mvn clean package -s "/var/jenkins_home/appconfig/maven/settings.xml" -Dmaven.test.skip=true' } } stage('3.打包'){ steps { sh 'pwd && ls -alh' sh 'docker build -t ${IMAGE_NAME} .' } } stage('4.部署'){ // 删除容器和虚悬镜像 steps { sh 'pwd && ls -alh' sh 'docker rm -f ${IMAGE_NAME} && docker rmi $(docker images -q -f dangling=true)' sh 'docker run -d -p 8888:8080 --name ${IMAGE_NAME} -v /mydata/logs/${IMAGE_NAME}:/logs/${IMAGE_NAME} ${IMAGE_NAME}' } } } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51Jenkins首页新创建流水线
配置流水线 Pipeline script from SCM -> Git -> RepositoryURL...
返回首页 Blue Ocean 选择运行