运行jenkins
docker pull jenkins/jenkins
docker run -d \
-u root --privileged=true \
-p 8080:8080 \
-p 50000:50000 \
-v /root/jenkins:/var/jenkins_home \
-v /etc/localtime:/etc/localtime \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
--name=jenkins \
jenkins/jenkins
初始配置
设置中文
Manage Jenkins ->Manage Plugins -> 可选插件 -> 输入“Locale” -> 勾选并点击安装 -> http://主机ip:8080/restart” -> 重启;
重启后 -> Manage Jenkins -> Configure System -> Locale -> 输入“zh_CN” -> 点击保存和应用。
或者直接安装中文插件:搜索chinese。
安装插件
安装需要用到的插件。若安装插件较慢,可以更换源;若安装插件失败,可以尝试更换版本。
- Maven Integration plugin: Maven 集成管理插件。
- Docker plugin: Docker集成插件。
- GitLab Plugin: GitLab集成插件。
- Publish Over SSH:远程文件发布插件。
- SSH: 远程脚本执行插件。
配置
系统管理 -> 全局工具配置 -> 找到Jdk、Git、Maven和docker。
配置好jdk、git、maven和docker的名称、路径等内容。
jdk容器中自带;git可以勾选自动安装;maven同样可以勾选自动安装;docker已经映射了本地的。
创建任务
构建jar
创建一个自由风格的软件项目 -> 填好git仓库地址和用户后 -> 添加maven构建,内容为“clean install -Dmaven.test.skip=true [-f pom.xml]” -> 保存 -> 点击build now即可开始自动拉取代码构建为jar包。
由于第一次构建去才会去自动下载maven,而maven的默认源很慢,可以先取消构建,修改为阿里的源后,在重新启动任务。
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
构建容器
1、在项目中加上依赖:
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<configuration>
<!--镜像名称有三部分组成:<registry>/<repository>:<tag>,tag默认为latest-->
<!--仓库名称-->
<repository>${project.artifactId}</repository>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
2、在pom.xml同级目录下添加Dockerfile文件。
# 设置JAVA版本
#FROM openjdk:8 #新版docker用这个
#FROM java:8-alpine #旧版docker用这个,更轻量
#新版用java:8-alpine的方法:
FROM ningbiluoer/java-alpine
# 拷贝运行JAR包
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
# 设置JVM运行参数, 这里限定下内存大小,减少开销
ENV JAVA_OPTS="\
-server \
-Xms256m \
-Xmx512m \
-XX:MetaspaceSize=256m \
-XX:MaxMetaspaceSize=512m"
#空参数,方便创建容器时传参
ENV PARAMS=""
# 入口点, 执行JAVA运行命令
ENTRYPOINT java -jar $JAVA_OPTS /app.jar $PARAMS
# 通过脚本执行
#ENTRYPOINT ["/tmp/start.sh"]
3、创建自由风格项目,源码管理选择git,填上项目地址和凭证。
4、添加构建步骤,类型为Invoke top-level Maven targets
:选择maven版本和填上目标内容为:
clean install -Dmaven.test.skip=true dockerfile:build [-f pom.xml]
注意:根据自己的实际代码路径配置
-Dmaven.test.skip=true 跳过测试
dockerfile:build 启动dockerfile插件构建容器
-f heima-leadnews-user/pom.xml 指定需要构建的文件(必须是pom)
5、添加构建步骤,类型为Execute shell
:
注:JOB_NAME为任务名称,由于构建出来的镜像名称被
repository
标签指定为了项目的artifactId
,所以任务名称要和artifactId
一样。
if [ -n "$(docker ps -a -f name=$JOB_NAME --format '{{.ID}}')" ]
then
#删除之前的容器
docker rm -f $JOB_NAME
# 清理无用镜像
docker image prune -f
docker run -d --net=host -e --name $JOB_NAME $JOB_NAME
# 启动docker服务
#docker run -d --net=host -e PARAMS="--spring.profiles.active=prod" --name $JOB_NAME $JOB_NAME
CI/CD
前面两步和构建容器中的构建容器部分一样。
3、系统管理 -> 系统配置 -> SSH remote hosts
注:ssh添加不了凭据,需要先到
系统管理 -> credentials
里创建凭据,填上远程服务器的用户名和密码。
4、在General里勾选This project is parameterized
,添加string类型的参数,名称为docker_registry
,填上私有仓库的地址和端口。
5、创建自由风格项目,源码管理选择git,填上项目地址和凭证。
6、添加构建步骤,类型为Invoke top-level Maven targets
:选择maven版本和填上目标内容为:
clean install -Dmaven.test.skip=true dockerfile:build [-f pom.xml]
7、添加构建步骤,类型为Execute shell
:
注:JOB_NAME为任务名称,由于构建出来的镜像名称被
repository
标签指定为了项目的artifactId
,所以任务名称要和artifactId
一样。
image_tag=$docker_registry/$JOB_NAME
echo '================docker镜像清理================'
if [ -n "$(docker ps -a -f name=$JOB_NAME --format '{{.ID}}')" ]
then
#删除之前的容器
docker rm -f $JOB_NAME
fi
# 清理无用镜像
docker image prune -f
# 创建TAG
docker tag $JOB_NAME $image_tag
echo '================docker镜像推送================'
# 推送镜像
docker push $image_tag
# 删除TAG
echo '================docker tag 清理 ================'
docker rmi $image_tag
8、添加构建步骤,类型为Execute shell script on remote host using ssh
:
echo '================拉取最新镜像================'
docker pull $docker_registry/$JOB_NAME
echo '================删除清理容器镜像================'
if [ -n "$(docker ps -a -f name=$JOB_NAME --format '{{.ID}}' )" ]
then
#删除之前的容器
docker rm -f $JOB_NAME
fi
# 清理无用镜像
docker image prune -f
echo '===============启动容器================'
docker run -d --net=host --name $JOB_NAME $docker_registry/$JOB_NAME
#echo '===============启动容器================'
#docker run -d --net=host -e PARAMS="--spring.profiles.active=prod" --name $JOB_NAME $docker_registry/$JOB_NAME
官仓构建
使用官方仓库进行CI/CD。
步骤基本与上节CI/CD一样,第4步的参数名称改为version
,值为版本号。
本地shell修改为:
登录官方账号时报错:WARNING! Using --password via the CLI is insecure. Use --password-stdin。该错旧版无,登录成功后,密码会经过base64编码保存在
$HOME/.docker/config.json
的auth属性中,使用该命令echo 'auth值' | base64 --decode
即可看到明文密码。
image_name="chat"
image_tag="ningbiluoer/$image_name"
echo '================构建镜像================'
# 清理无用镜像
docker image prune -f
# 创建TAG
docker tag $image_name $image_tag:$version
echo '================推送镜像================'
# 推送镜像(需先登录官方docker账号)
docker push $image_tag:$version
echo '================推送完成================'
docker rmi $image_tag:$version
远程shell改为:
image_name="chat"
image_tag="ningbiluoer/$image_name"
echo '================清理容器================'
if [ -n "$(docker ps -a -f name=$image_name --format '{{.ID}}')" ]
then
#删除之前的容器
docker rm -f $image_name
#删除镜像
docker rmi $(docker images --filter=reference=$image_tag --format='{{.ID}}')
fi
# 清理无用镜像
docker image prune -f
echo '================拉取镜像================'
docker pull $image_tag:$version
echo '===============启动容器================'
docker run -d -p 32380:32380 --name $image_name $image_tag:$version
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » docker部署jenkins和jenkins的基本使用
发表评论 取消回复