基于Docker构建Jenkins CI平台

1|01、部署gitlab

1|11.1 部署gitlab

docker run -d \ --name gitlab \ -p 8443:443 \ -p 9999:80 \ -p 9998:22 \ -v $PWD/config:/etc/gitlab \ -v $PWD/logs:/var/log/gitlab \ -v $PWD/data:/var/opt/gitlab \ -v /etc/localtime:/etc/localtime \ lizhenliang/gitlab-ce-zh:latest gitlab/gitlab-ce:latest

访问地址:http://IP:9999

初次会先设置管理员密码 ,然后登陆,默认管理员用户名root,密码就是刚设置的。

1|21.2 创建项目,提交测试代码

进入后先创建项目,提交代码,以便后面测试。

git clone http://192.168.31.62:9999/root/java-demo.git git add . git config --global user.email "you@example.com" git config --global user.name "Your Name" git commit -m 'all' git push origin master

2|02、部署Harbor镜像仓库

2|12.1 安装docker与docker-compose

# wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo # yum install docker-ce -y # systemctl start docker # systemctl enable docker

2|22.2 解压离线包部署

# tar zxvf harbor-offline-installer-v1.9.1.tgz # cd harbor # vi harbor.yml hostname: 192.168.31.70 # ./prepare # ./install.sh

2|32.3 在Jenkins主机配置Docker可信任

由于habor未配置https,还需要在docker配置可信任。

# cat /etc/docker/daemon.json {"registry-mirrors": ["http://f1361db2.m.daocloud.io"], "insecure-registries": ["192.168.31.70"] } # systemctl restart docker

3|03、部署Jenkins

3|13.1 准备JDK和Maven环境

# tar zxvf jdk-8u45-linux-x64.tar.gz # mv jdk1.8.0_45 /usr/local/jdk # tar zxf apache-maven-3.5.0-bin.tar.gz # mv apache-maven-3.5.0 /usr/local/maven
docker run -d --name jenkins -p 82:8080 -p 50000:50000 -u root \ -v /opt/jenkins_home:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /usr/bin/docker:/usr/bin/docker \ -v /usr/local/maven:/usr/local/maven \ -v /usr/local/jdk:/usr/local/jdk \ -v /etc/localtime:/etc/localtime \ --name jenkins jenkins/jenkins:lts

使用/root/.ssh中私钥访问gitlab

3|23.2 安装插件

系统管理-->插件管理-->Installed

搜索git/pipeline,点击安装。

sed -i 's/http:\/\/updates.jenkins- ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

4|04、发布测试

4|14.1 添加参数化构建

This project is parameterized -> String Parameter

Name:Branch # 变量名,下面脚本中调用

Default Value:master # 默认分支

Description:发布的代码分支 # 描述

4|24.2 Pipeline脚本

#!/usr/bin/env groovy def registry = "192.168.31.70" def project = "welcome" def app_name = "demo" def image_name = "${registry}/${project}/${app_name}:${Branch}-${BUILD_NUMBER}" def git_address = "git@192.168.31.62:/home/git/java-demo.git" def docker_registry_auth = "b37a147e-5217-4359-8372-17fd9a8edfcc" def git_auth = "b3e33c8b-c7e0-47b9-baee-d7629d71f154" pipeline { agent any stages { stage('拉取代码'){ steps { checkout([$class: 'GitSCM', branches: [[name: '${Branch}']], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]]) } } stage('代码编译'){ steps { sh """ JAVA_HOME=/usr/local/jdk PATH=$JAVA_HOME/bin:/usr/local/maven/bin:$PATH mvn clean package -Dmaven.test.skip=true """ } } stage('构建镜像'){ steps { withCredentials([usernamePassword(credentialsId: "${docker_registry_auth}", passwordVariable: 'password', usernameVariable: 'username')]) { sh """ echo ' FROM ${registry}/library/tomcat:v1 LABEL maitainer lizhenliang RUN rm -rf /usr/local/tomcat/webapps/* ADD target/*.war /usr/local/tomcat/webapps/ROOT.war ' > Dockerfile docker build -t ${image_name} . docker login -u ${username} -p '${password}' ${registry} docker push ${image_name} """ } } } stage('部署到Docker'){ steps { sh """ REPOSITORY=${image_name} docker rm -f tomcat-java-demo |true docker container run -d --name tomcat-java-demo -p 88:8080 ${image_name} """ } } } }

4|34.3 添加凭据

1、添加拉取git代码凭据,并获取id替换到上面git_auth变量值。

2、添加拉取harbor镜像凭据,并获取id替换到上面docker_registry_auth变量值。


__EOF__

本文作者_安阳
本文链接https://www.cnblogs.com/msfyang/p/15168812.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   _安阳  阅读(39)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示