Jenkins 环境配置
## maven 安装
wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
tar -xzvf apache-maven-3.6.3-bin.tar.gz
配置 setting.xml
配置环境变量
vi /etc/profile
export M2_HOME=/mydata/maven3.6.3
export PATH=$PATH:${M2_HOME}/bin
环境变量生效
source /etc/profile
## 进入容器
docker exec -it jenkins /bin/bash
## 来查看 java 路径在:/usr/local/openjdk-8
echo $JAVA_HOME
## 来查看 git 路径 :/usr/bin/git
which git
Jenkins 安装
## 下载
docker pull jenkins/jenkins:lts
## 启动
docker run -p 8080:8080 -p 50000:5000 --name jenkins \
-u root \
-v /mydata/jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(which docker):/usr/bin/docker \
-v /etc/localtime:/etc/localtime \
-v /mydata/maven3.6.3:/usr/local/maven \
-v /mydata/maven_respository:/mydata/maven_respository \
-d jenkins/jenkins:lts
## 访问:
http://192.168.111.131:8080/
## jenkins 重启
http://192.168.111.131:8080/restart
## 下命令从容器启动日志中获取管理密码
docker logs jenkins
Jenkins 安装:https://juejin.cn/post/6844904022097264648
/mydata/jenkins_home:/var/jenkins_home 把Jenkins文件存放到宿主机上
/var/run/docker.sock:/var/run/docker.sock : Jenkins 能通过主机的 Docker 守护进程(也就是 Docker Engine)来操作 docker 容器
-v $(which docker):/usr/bin/docker : 这个是将外部的docker 挂载到 jenkins 容器内部,以便其能使用 docker 命令
-v /etc/localtime:/etc/localtime 时间同步
/mydata/maven3.6.3:/usr/local/maven 宿主机的Maven挂到容器中(宿主机先安装maven)
/mydata/maven_respository:/mydata/maven_respository : maven依赖下载到宿主机上
-v /etc/localtime:/etc/localtime 让容器使用和服务器同样的时间设置
-v /etc/localtime:/etc/localtime \
Jenkins 配置
-
安装插件
- 根据角色管理权限的插件:Role-based Authorization Strategy
- 远程使用ssh的插件:SSH plugin
-
配置账号
-
系统配置
-
全局工具配置 jdk、git、maven
Jenkins 项目配置
方式一:通过部署机器上的脚本启动项目打包的镜像
方式二:通过Jenkins 配置 Shell的脚本启动项目镜像(也就是脚本中的内容)
脚本内容
#!/usr/bin/env bash
app_name='mall-tiny-jenkins'
docker stop ${app_name}
echo '----stop container----'
docker rm ${app_name}
echo '----rm container----'
docker run -p 8088:8088 -p 9999:9999 --name ${app_name} \
--link mysql:db \
-v /etc/localtime:/etc/localtime \
-v /sda3/mydata/app/${app_name}/logs:/var/logs \
-d --network docker-network mall-tiny/${app_name}:1.0-SNAPSHOT \
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9999
echo '----start container----'
- 创建网路
# docker-network是局域网的名字,自定义 docker network create docker-network
--network docker-network
mall-tiny-jenkins加入到 docker-network 网络中-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9999
开启远程debug功能,端口 9999,- idea 配置
Jenkins 构建日志
Started by upstream project "gitee-mall-tiny-jenkins" build number 10
originally caused by:
Started by user admin
Running as SYSTEM
## 项目下载的目录
Building in workspace /var/jenkins_home/workspace/gitee-mall-tiny-jenkins/default
[WS-CLEANUP] Deleting project workspace...
[WS-CLEANUP] Deferred wipeout is used...
The recommended git tool is: NONE
using credential gitee
Cloning the remote Git repository
## 从 gitee上克隆项目
Cloning repository https://gitee.com/ZJB2020/mall-tiny-jenkins.git
> /usr/bin/git init /var/jenkins_home/workspace/gitee-mall-tiny-jenkins/default # timeout=10
Fetching upstream changes from https://gitee.com/ZJB2020/mall-tiny-jenkins.git
> /usr/bin/git --version # timeout=10
> git --version # 'git version 2.11.0'
using GIT_ASKPASS to set credentials gitee
> /usr/bin/git fetch --tags --progress -- https://gitee.com/ZJB2020/mall-tiny-jenkins.git +refs/heads/*:refs/remotes/origin/* # timeout=10
> /usr/bin/git config remote.origin.url https://gitee.com/ZJB2020/mall-tiny-jenkins.git # timeout=10
> /usr/bin/git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10
Avoid second fetch
Checking out Revision 85c47307d00b7e85df695dfa288897845fec4e98 (refs/remotes/origin/master)
> /usr/bin/git config core.sparsecheckout # timeout=10
> /usr/bin/git checkout -f 85c47307d00b7e85df695dfa288897845fec4e98 # timeout=10
Commit message: "init"
> /usr/bin/git rev-list --no-walk 85c47307d00b7e85df695dfa288897845fec4e98 # timeout=10
## maven 依赖下载
[default] $ /usr/local/maven/bin/mvn -f pom.xml clean package
[INFO] Scanning for projects...
Downloading from nexus-aliyun: http://maven.aliyun.com/nexus/content/groups/public/org/springframework/boot/spring-boot-starter-parent/2.1.3.RELEASE/spring-boot-starter-parent-2.1.3.RELEASE.pom
Progress (1): 4.1/12 kB
Progress (1): 7.8/12 kB
Progress (1): 12/12 kB
Progress (1): 12 kB
.........
[INFO] --- docker-maven-plugin:1.1.0:build (build-image) @ mall-tiny-jenkins ---
[INFO] Using authentication suppliers: [ConfigFileRegistryAuthSupplier]
[INFO] Copying /var/jenkins_home/workspace/gitee-mall-tiny-jenkins/default/target/mall-tiny-jenkins-1.0-SNAPSHOT.jar -> /var/jenkins_home/workspace/gitee-mall-tiny-jenkins/default/target/docker/mall-tiny-jenkins-1.0-SNAPSHOT.jar
## 构建 mall-tiny/mall-tiny-jenkins:1.0-SNAPSHOT 镜像
[INFO] Building image mall-tiny/mall-tiny-jenkins:1.0-SNAPSHOT
Step 1/3 : FROM java:8
---> d23bdf5b1b1b
Step 2/3 : ADD /mall-tiny-jenkins-1.0-SNAPSHOT.jar //
---> afa47f52cf58
Step 3/3 : ENTRYPOINT ["java", "-jar","/mall-tiny-jenkins-1.0-SNAPSHOT.jar"]
---> Running in 9f94e338f038
Removing intermediate container 9f94e338f038
---> 68e3706b769e
ProgressMessage{id=null, status=null, stream=null, error=null, progress=null, progressDetail=null}
Successfully built 68e3706b769e
Successfully tagged mall-tiny/mall-tiny-jenkins:1.0-SNAPSHOT
[INFO] Built mall-tiny/mall-tiny-jenkins:1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 31.317 s
[INFO] Finished at: 2020-12-19T14:57:34Z
[INFO] ------------------------------------------------------------------------
## 执行Jenkins 脚本
[SSH] script:
/mydata/sh/mall-tiny-jenkins.sh
[SSH] executing...
docker: Error response from daemon: Cannot link to /mysql, as it does not belong to the default network.
mall-tiny-jenkins
----stop container----
mall-tiny-jenkins
----rm container----
81d994fbba610109f07c6ab2a36808040ca7ee7c9e7f10f7b2572371803f40a9
----start container----
[SSH] completed
[SSH] exit-status: 0
Finished: SUCCESS
Cannot link to /mysql, as it does not belong to the default
mysql 没有启动
手动启动项目并访问地址
-
docker 启动mysql
docker run -p 3306:3306 --name mysql \ > -v /mydata/mysql/log:/var/log/mysql \ > -v /mydata/mysql/data:/var/lib/mysql \ > -v /mydata/mysql/conf:/etc/mysql \ > -e MYSQL_ROOT_PASSWORD=root \ > -d --network docker-network mysql:5.7
查看已有的network
docker network ls
手动链接外部网络(通过 --network docker-network 或下面的方式都可以)
docker network connect docker-network mysql -
docker 启动项目
docker run -p 8088:8088 --name mall-tiny-jenkins \ --link mysql:db \ -v /etc/localtime:/etc/localtime \ -v /mydata/app/mall-tiny-jenkins/logs:/var/logs \ -d mall-tiny/mall-tiny-jenkins:1.0-SNAPSHOT
-
访问地址
http://192.168.111.131:8088/swagger-ui.html
项目docker-maven-plugin配置
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<skipTests>true</skipTests>
<dockerHost>http://192.168.111.131:2375</dockerHost>
<docker.registryUrl>192.168.111.131:5000</docker.registryUrl>
</properties>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.1.0</version>
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<imageName>mall-tiny/${project.artifactId}:${project.version}</imageName>
<!--<imageName>${docker.registryUrl}/mall-tiny/${project.artifactId}:${project.version} </imageName>-->
<dockerHost>${dockerHost}</dockerHost>
<baseImage>java:8</baseImage>
<env>
<JAVA_OPTS>"-Xms512m -Xmx512m"</JAVA_OPTS>
</env>
<!-- shell 格式的 ENTRYPOINT,docker容器启动时执行的命令-->
<entryPoint>
["/bin/sh", "-c","java $JAVA_OPTS -jar -Djava.security.egd=file:/dev/./urandom -Dspring.profiles.active=prod $0 $@ /${project.build.finalName}.jar"]
</entryPoint>
<!--<pushImage>true</pushImage>-->
<!--<registryUrl>${docker.registryUrl}</registryUrl>-->
<!--这里是复制 jar 包到 docker 容器指定目录配置-->
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>