启动docker,查找Jenkins镜像文件
docker search jenkins (jenkins已经弃用,所以选择jenkins/jenkins)
下载Jenkins镜像文件
docker pull jenkins/jenkins:lts
2.创建Jenkins挂载目录并授权权限,这样我们就可以很方便地对容器内的配置文件进行修改。
mkdir -p /data/jenkins_home/ chmod 777 /data/jenkins_home/
3.创建并启动Jenkins容器(挂载了本地maven和jdk和maven本地仓库的地址)
这里需要注意的有两个地方:
因为我的Jenkinsfile 需要docker 使用挂载了docker
maven也是挂载本地的maven 使用需要授权宿主机maven仓库的地址
chmod 777 maven仓库地址文件夹 #也可能遇到挂载的docker文件夹和相关命令 容器的用户无权限使用 #使用项目两个命令 不过只是临时解决方案 如果重启服务器 权限会变回原来的 chmod 777 /var/run/docker.sock chmod 777 /usr/bin/dockers #如果想永久解决权限问题使用项目的命令 在启动容器的时候指定启动用户 docker run -d -p 8090:8080 -p 8091:50000 -u root \
docker run -d -p 8090:8080 -p 8091:50000 -u root \ -v /mydata/jenkins_home:/var/jenkins_home \ -v /mydata/apache-maven-3.6.3:/usr/local/maven \ -v /usr/local/jdk1.8.0_181:/usr/local/jdk1.8 \ -v /etc/localtime:/etc/localtime \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /usr/bin/docker:/usr/bin/docker \ -v /usr/local/MavenRepository:/usr/local/MavenRepository \ -v /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 \ -v /var/lib/docker/tmp:/var/lib/docker/tmp \ --restart=always \ --privileged=true \ --name jenkins jenkins/jenkins:lts
错误配置:修改 vi hudson.model.UpdateCenter.xml里的内容(这是一个坑 如果配置了下载插件货下载不全)
vim ./hudson.model.UpdateCenter.xml
将 url 修改为 清华大学官方镜像:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
登入jenkins 在docker logs jenkins 查看第一次登入的密码
dome运行的Jenkinsfile
pipeline {
agent any
tools {
maven 'maven'
}
parameters {
string(name:'TAG_NAME',defaultValue: '',description:'')
}
environment {
DOCKER_CREDENTIAL_ID = '墨风如吹雪'
GITHUB_CREDENTIAL_ID = 'zp872571679'
KUBECONFIG_CREDENTIAL_ID = 'demo-kubeconfig'
REGISTRY = 'registry.cn-hangzhou.aliyuncs.com'
DOCKERHUB_NAMESPACE = 'zp_gulimall'
APP_NAME = 'docker-test'
}
stages {
stage ('checkout scm') {
steps {
checkout(scm)
}
}
stage ('运行测试程序') {
steps {
sh 'mvn clean -gs /usr/local/maven/conf/settings.xml test'
}
}
stage ('打包并上传到docker镜像仓库') {
steps {
sh 'mvn -Dmaven.test.skip=true -gs /usr/local/maven/conf/settings.xml clean package'
sh 'docker build -f Dockerfile -t $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER .'
withCredentials([usernamePassword(credentialsId: 'ALIYUN_DOCKER_ACCOUNT', passwordVariable: 'password', usernameVariable: 'username')]) {
sh 'docker login $REGISTRY --username=${username} --password=${password}'
}
sh 'docker push $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER'
}
}
stage ('把最后的版本 push打包成tag 打包并上传到docker镜像仓库') {
steps {
sh 'docker tag $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:latest '
sh 'docker push $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:latest '
}
}
stage ('部署到dev环境') {
steps {
input (id: 'deploy-to-dev', message: '是否部署到dev环境运行?')
sh 'docker stop $APP_NAME '
sh 'docker rm $APP_NAME '
sh 'docker run -d -p8080:8080 --name $APP_NAME $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:latest '
}
}
stage ('推送相关的tag到git仓库'){
steps {
input (id: 'release-image-with-tag', message: '是否发布镜像版本?')
sh 'git config --global user.email "872571679@qq.com" '
sh 'git config --global user.name "zp" '
sh 'git tag -a $TAG_NAME -m "$TAG_NAME" '
withCredentials([usernamePassword(credentialsId: 'zpGitee', passwordVariable: 'password', usernameVariable: 'username')]) {
sh 'git push https://${username}:${password}@gitee.com/zp872571679/docker-test.git --tags'
}
sh 'docker tag $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:$TAG_NAME '
sh 'docker push $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:$TAG_NAME '
}
}
}
}
不出现明码出现的密码和账户所以不安全,使用启用jemkins的全局凭证管理
去到 Jenkins 的【系统管理】→ 【Manage Credentials】下:
然后创建相关的凭证 在jenkinsfile里面使用
安装nacos
#查看版本
docker search nacos
#下载最新的镜像
docker pull nacos/nacos-server
#创建文件夹 方便挂载
mkdir -p /mydata/nacos
cd /mydata/nacos
#因为绑定本地数据库 实现数据持久化 需要找到本地mysql容器通信的ip
docker network inspect bridge
"Containers": {
"132860eb2e90f245f74d32e148bd05010397f6e601cfde87bcc4b4ca652ed04b": {
"Name": "mysql",
"EndpointID": "ccffaa0778264ad4852493ebd9b1edc840b904e5ea15fcd9daefc4a2b5d72481",
"MacAddress": "02:42:ac:11:00:05",
"IPv4Address": "172.17.0.5/16",
"IPv6Address": ""
},
#挂载对应目录启动nacos
docker run -d \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=172.18.0.100 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=root \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-p 8848:8848 \
--restart=always \
--privileged=true \
--name nacos \
-v /mydata/nacos/logs:/home/nacos/logs \
--network gulimallNet --ip 172.18.0.101 \
nacos/nacos-server:latest
mysql 开启忽略大小写
项目启动报错 JobPersistenceException: Couldn't retrieve trigger: Table 'leo_quartz.QRTZ_TSSDRS' doesn't exist [See nested exception: com.mysql.jdbc.excep tions.jdbc4.MySQLSyntaxErrorException: Table 'leo_quartz.QRTZ_TSSDRS' doesn't exist] 需要改 MySQL 的配置文件,Linux 下 MySQL 的配置文件可能是 /etc/my.cnf,或 /etc/mysql/my.cnf,这依赖于你的安装方式。假如是 /etc/my.cnf,那么执行 lower_case_table_names=1
如果想学习或者其他的操作可以去下面地址下载:
https://gitee.com/zp872571679/docker-test.git