赞
踩
Docker安装jenkins,配置环境,最全,已成功验证。
docker pull jenkins/jenkins:2.346.1-lts #docker run -d -p 8080:8080 -p 50000:50000 --name jenkin jenkins/jenkins:2.346.1-lts docker run -d --name jenkin jenkins/jenkins:2.346.1-lts mkdir -p /usr/docker/jenkins/jenkins_home docker cp jenkin:/var/jenkins_home /usr/docker/jenkins/jenkins_home ## 1000:1000: 表示新的所有者和所属组。在这个例子中,1000 是用户的标识号(UID),1000 是组的标识号(GID)。通常,这些标识号对应于系统中的用户和组。 请注意,1000 只是一个示例标识号。 而容器中jenkins用户的 uid 为 1000。 chown -R 1000:1000 /usr/docker/jenkins chown -R 777 /usr/docker/jenkins chown 用于更改文件或目录的所有者和所属组。 chmod 用于更改文件或目录的权限。 docker rm -f jenkin #修改镜像源 cd /usr/docker/jenkins/jenkins_home vim hudson.model.UpdateCenter.xml #将url内容修改为清华大学官方镜像 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json 示例: <url>https://updates.jenkins.io/update-center.json</url> 替换成: <url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
3、文件夹权限
修改文件夹权限
需要修改下目录权限,因为当映射本地数据卷时,/data/jenkins_home/目录的拥有者为root用户,
而容器中jenkins用户的 uid 为 1000。
我们创建一个jenkins目录
chown -R 1000:1000 /usr/docker/jenkins
docker rm -f jenkin
chmod -R 777 /usr/docker/jenkins
docker run -u root -d -p 9095:8080 -p 50000:50000 \
-v /usr/docker/jenkins/jenkins_home:/var/jenkins_home \
-v $(which docker):/bin/docker \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/local/java/jdk1.8.0_401:/usr/local/java \
-v /usr/local/maven/apache-maven-3.9.6:/usr/local/maven \
-v /etc/localtime:/etc/localtime \
--name jenkins jenkins/jenkins
日志查看
docker logs jenkins
获取密码文件(2选1)
#容器文件
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
#映射文件
cat /usr/docker/jenkins/jenkins_home/secrets/initialAdminPassword
本人云服务器地址:111.231.74.191
http://111.231.74.191:9095/
需要开放9095的端口
输入密码:之前获取的密码
28abb74d816b46818d0212d935df9e5a
创建用户
admin
3301359a
推荐新手安装。
然后再安装一些固定的插件
Maven Integration : Maven 集成管理插件。
Docker : Docker集成插件。
GitLab : GitLab集成插件。
Publish Over SSH:远程文件发布插件。
SSH: 远程脚本执行插件。
Git server:可以直接插件安装git,避免本地挂载的宝贝
blue ocean:
Deploy to container:
dockerpip line:
git param :
# FROM java:8
FROM anapsix/alpine-java:8_server-jre_unlimited
# 将当前目录下的jar包复制到docker容器的/目录下
COPY *.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="--spring.profiles.active=prod"
# 声明服务运行在8080端口
EXPOSE 8080
# 指定docker容器启动时运行jar包
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -jar /app.jar $PARAMS" ]
pipeline{ agent any environment { IMAGE_NAME = "ruoyi-admin" WS = "${WORKSPACE}" } //定义流水线的加工流程 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 "/usr/local/maven/conf/settings.xml" -Dmaven.test.skip=true' } } stage('3.打包'){ steps { sh 'pwd && ls -alh' sh 'echo ${WS}' // sh 'mv ${WS}/${IMAGE_NAME}/target/*.jar ${WS}/${IMAGE_NAME}.jar && pwd && ls -alh && docker build -t ${IMAGE_NAME} .' sh 'docker build -t ${IMAGE_NAME} -f Dockerfile ${WS}/${IMAGE_NAME}/target/' } } stage('4.部署'){ // 删除容器和虚悬镜像 steps { sh 'pwd && ls -alh' sh 'docker rm -f ${IMAGE_NAME} || true && docker rmi $(docker images -q -f dangling=true) || true' sh 'docker run -d -p 8888:8080 --name ${IMAGE_NAME} -v /mydata/logs/${IMAGE_NAME}:/logs/${IMAGE_NAME} ${IMAGE_NAME}' } } } }
redis:
host: 111.231.74.191 # 地址
port: 6379 # 端口
database: 1 # 数据库索引
password: 123456 # 密码,建议生产环境开启
1、在前端项目ruoyi-ui中编写Dockerfile和Jenkinsfile两个文件, 并创建两个环境的nginx的配置文件(前端项目要在nginx中运行), 案例演示两个nginx的配置文件除了名字不同, 里面的内容是一相同
FROM nginx:1.22
# 构建参数,在Jenkinsfile中构建镜像时定义
ARG PROFILE
# 将dist文件中的内容复制到 `/usr/share/nginx/html/` 这个目录下面
COPY dist/ /usr/share/nginx/html/
# 用本地配置文件来替换nginx镜像里的默认配置
COPY nginx/nginx-${PROFILE}.conf /etc/nginx/nginx.conf
EXPOSE 80
# 以前台形式持续运行
CMD ["nginx", "-g", "daemon off;"]
pipeline{ agent any environment { // 镜像名称 IMAGE_NAME = "ruoyi-ui" // 工作目录 WS = "${WORKSPACE}" // 后台项目镜像名称 API_IMAGE_NAME = "ruoyi-admin" // 自定义的构建参数 PROFILE = "prod" } //定义流水线的加工流程 stages { //流水线的所有阶段 stage('1.环境检查'){ steps { sh 'pwd && ls -alh' sh 'printenv' sh 'docker version' sh 'git --version' } } stage('2.编译'){ agent { docker { image 'node:12-alpine' } } steps { sh 'pwd && ls -alh' sh 'node -v' sh 'cd ${WS} && npm install --registry=https://registry.npmmirror.com --no-fund && npm run build:prod' } } stage('3.打包'){ steps { sh 'pwd && ls -alh' sh 'docker build --build-arg PROFILE=${PROFILE} -t ${IMAGE_NAME} .' } } stage('4.部署'){ // 删除容器和虚悬镜像 steps { sh 'pwd && ls -alh' sh 'docker rm -f ${IMAGE_NAME} || true && docker rmi $(docker images -q -f dangling=true) || true' sh 'docker run -d -p 8889:80 --name ${IMAGE_NAME} --link ruoyi-admin:ruoyi-admin ${IMAGE_NAME}' } } } }
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; try_files $uri $uri/ /index.html; index index.html index.htm; } location /prod-api/{ proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #访问容器地址 proxy_pass http://ruoyi-admin:8080/; #访问外网地址, 后台容器端口映射8888:8080 #proxy_pass http://47.114.186.174:8888/; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
gitlab安装:
上传过程忽略。这个比较简单。
ruoyi-ui
ruoyi
/usr/local/maven/conf/setting.xml
jdk配置 JAVA_HOME
/usr/local/java
# which java
/opt/java/openjdk/bin/java
/usr/local/maven
注意空格问题!!
docker info
Docker Root Dir: /var/lib/docker
##将这个映射到docker路径
/usr/local/docker
##参考
https://blog.csdn.net/yprufeng/article/details/136320990
https://blog.csdn.net/weixin_43202160/article/details/134416447
信息说明
在您提供的信息中,/usr/bin/docker 是 Docker 的可执行文件所在的位置,它通常被认为是 Docker 的安装目录。
虽然 /var/lib/docker 是 Docker 的根目录,其中包含 Docker 的数据、镜像和容器等,但一般情况下,/usr/bin/docker 被认为是 Docker 的可执行文件的安装路径。
请注意,具体的安装目录可能因不同的系统和安装方式而有所不同。上述解释是一般情况下的情况,具体结果可能会因不同的系统和配置而有所不同。如果您使用了特定的安装方式,请提供更多的详细信息以便我们给出更准确的答案。
开启docker服务器的远程访问链接
在docker所在服务器上的/usr/lib/systemd/system/docker.service文件中开启docker远程访问
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
在jenkins中配置该docker服务
可以了。要映射完成才行。
harbor的参考地址:https://blog.51cto.com/wst021sh/7245687
docker inspect OR
会把SSH Server自动带入过来。
#执行shell
APP_NAME=test-project
APP_PORT=8083
RUN_ENV=prod
cd /var/jenkins_home/workspace/$APP_NAME
docker stop $APP_NAME || true
docker rm $APP_NAME || true
docker rmi $APP_NAME || true
docker build -f src/docker/Dockerfile -t $APP_NAME .
docker run -d -p $APP_PORT:$APP_PORT -e "SPRING_PROFILES_ACTIVE=$RUN_ENV" --name $APP_NAME $APP_NAME:latest
cd /data/test
ps -ef | grep uht-sf-express-center-0.0.1-SNAPSHOT.jar | grep -v grep | awk '{printf $2}' | xargs kill -9
nohup java -jar uht-sf-express-center-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod > uht-sf-express-center.log 2>&1 &
https://www.cnblogs.com/juelian/p/17782048.html
pipeline语法有两种
http://111.231.74.191:9980//my-group/ruoyi.git
root
3301359a
docker cp /opt/etc/profile jenkins:/etc/profile
进入容器内
source /etc/profile
修改/etc/profile
echo '================拉取最新镜像================'
docker pull $docker_registry/docker_storage/$JOB_NAME
echo '================删除清理容器镜像================'
if [ -n "$(docker ps -a -f name=$JOB_NAME --format '{{.ID}}' )" ]
then
#删除之前的容器
docker rm -f $(docker ps -a -f name=$JOB_NAME --format '{{.ID}}' )
fi
# 清理镜像
docker image prune -f
echo '===============启动容器================'
docker run -d --net=host -e PARAMS="--spring.profiles.active=prod" --name $JOB_NAME $docker_registry/docker_storage/$JOB_NAME
dockerpip line,Jenkinsfile 其中的agent docker需要用到。
tips:
#要为其添加挂载卷(volume)
docker container update --mount source=/host/path,target=/container/path,readonly=false container_name_or_id
又是一个错误。
我的jenkins是docker部署的
需要在jenkins的容器里 执行以下命令访问git上的仓库地址,把git的主机添加到/root/.ssh/known_hosts(执行命令前known_hosts这个文件是不存在的,执行后就有了)
root@80b05f3c5097:~/.ssh# git ls-remote -h git@gitee.com:XXXXX/autotest.git HEAD The authenticity of host 'gitee.com (212.64.63.215)' can't be established. ECDSA key fingerprint is SHA256:FQGC9Kn/eye1W8icdBgrQp+KkGYoFgbVr17bmjey0Wc. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'gitee.com,212.64.63.215' (ECDSA) to the list of known hosts. root@80b05f3c5097:~/.ssh# root@80b05f3c5097:~/.ssh# root@80b05f3c5097:~/.ssh# pwd /root/.ssh root@80b05f3c5097:~/.ssh# ls -al total 12 drwx------ 2 root root 57 Oct 25 03:55 . drwx------ 1 root root 71 Sep 28 04:49 .. -rw------- 1 root root 2602 Oct 25 02:42 id_rsa -rw-r--r-- 1 root root 571 Oct 25 02:42 id_rsa.pub -rw-r--r-- 1 root root 444 Oct 25 03:55 ls
然后jenkins就不报错了
ssh <用户名>@<节点服务器IP>
ssh root@<节点服务器IP>
ssh git@111.231.74.191:9922
1.先切换到jenkins用户下(此时在jenkins安装目录下)
sudo su -s /bin/bash jenkins
cd ~
ssh-keygen -m PEM -t rsa -f id_rsa
# ssh-keygen -t rsa(这个不行)
cat .ssh/id_rsa.pub
或者
cat id_rsa.pub
ssh://git@111.231.74.191:9922/my-group/ruoyi.git
main
http://111.231.74.191:9980/my-group/ruoyi.git
root
3301359a
gitlab
maven配置的问题
/usr/local/maven/conf/settings.xml
package -s “/usr/local/maven/conf/settings.xml” -Dmaven.test.skip=true’
10、终于成功了!!走了一天的歪路。。。纯纯的一个人瞎琢磨。
然后就运行就行了。!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。