流水线流程
-
1)开发人员提交代码到Git版本仓库;
-
2)Jenkins人工/定时触发项目构建;
-
3)Jenkins拉取代码、代码编码、打包镜像、推送到镜像仓库;
-
4)Jenkins在Docker主机创建容器并发布。
环境
- 192.168.100.10:开发人员电脑
- 192.168.100.11:git仓库
- 192.168.100.12:jenkins服务器
- 192.168.100.13:harbo服务器
- 192.168.100.14:web业务服务器
Git服务器搭建
[root@git-server ~]# useradd git //创建一个用户
[root@git-server ~]# passwd git //配置密码
Changing password for user git.
New password:
[root@git-server ~]# yum -y install git //安装git管理系统
[root@git-server ~]# useradd git
[root@git-server ~]# su - git //切换用户
[git@git-server ~]$ mkdir repos //创建仓库
[git@git-server ~]$ cd repos //进入仓库
[git@git-server repos]$ mkdir app.git //创建项目
[git@git-server repos]$ cd app.git //进入项目目录
[git@git-server app.git]$ git --bare init //初始化项目目录,生成仓库信息
Initialized empty Git repository in /root/repos/app.git/
[git@git-server app.git]$ ls //查看仓库信息
branches config description HEAD hooks info objects refs
切换到开发人员主机
[root@client ~]# ssh-keygen //生成密钥对
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): //回车
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): //回车
Enter same passphrase again: //回车
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:rZQh36zgWoHGh+xmEVIEP+I491iltmVFdgRaWFJF7mA root@client
The key's randomart image is:
+---[RSA 2048]----+
| .oo .+B== |
| o .* o |
| o + + E . |
| o = B = O |
|o o @ * S = |
| o B B + o |
| . * o o |
| o o |
| . |
+----[SHA256]-----+
[root@client ~]# ssh-copy-id git@192.168.100.11 //复制秘钥到git服务器的git用户
[root@client ~]# git clone git@192.168.100.11:/home/git/repos/app.git //拉取项目
[root@client app]# git clone https://github.com/407777853/java-demo //拉取一个项目作为代码
[root@client ~]# mv java-demo/* app/
[root@client ~]# cd app
[root@client app]# vim .git/config //修改配置文件
... ...
[remote "origin"]
url = git@192.168.100.11:/home/git/repos/app.git //修改默认提交代码位置
... ...
[root@client app]# git add .
[root@client app]# git config --global user.name "Your Name" && git config --global user.email you@example.com //配置本地仓库用户名与email
[root@client app]# git commit -m "hhh" //提交代码到本地仓库
[root@client app]# git push origin master //提交代码到master仓库
jenkins服务器搭建
[root@jenkins-server ~]# tar xvf apache-maven-3.8.1-bin.tar.gz -C /usr/local/ //解压maven到安装目录
[root@jenkins-server ~]# cd /usr/local/ //进入安装目录
[root@jenkins-server local]# mv apache-maven-3.8.1/ maven //更改目录名称
[root@jenkins-server ~]# docker pull jenkins/jenkins:lts-jdk11 //拉取jenkins镜像
[root@jenkins-server ~]# mkdir /docker/jenkins -p //将docker工作目录对外挂载
[root@jenkins-server ~]# chmod 777 /docker/jenkins/ //对此目录开放权限
[root@jenkins-server ~]# docker run -itd -p 9003:8080 -p 9004:50000 --restart always -v /var/run/docker.scok:/var/run/docker.scok -v $(which docker):$(which docker) -v /docker/jenkins:/var/jenkins_home -v /usr/local/maven/:/usr/local/maven/ --name jenkins jenkins/jenkins:lts-jdk11 //运行jenkins容器
38816e2e55d87604533483cc6d24ddd7958d1923c0eb77165a1e2db66f30022b
[root@jenkins-server ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
38816e2e55d8 jenkins/jenkins:lts-jdk11 "/sbin/tini -- /usr/…" 6 seconds ago Restarting (1) Less than a second ago jenkins
[root@jenkins-server ~]# docker logs -f jenkins //追踪日志查看密码
... ...
4ee07183daa14ce6bf5f8fecc0e0c82b
... ...
通过浏览器访问:
jenkins安装详情
Harbor服务器搭建
下载harbor链接
https://github.com/goharbor/harbor/releases/tag/v2.2.3
[root@harbor-server harbor]# curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose //安装docker -compose
[root@harbor-server harbor]# chmod +x /usr/local/bin/docker-compose //赋予执行权限
[root@harbor-server ~]# tar xf harbor-offline-installer-v2.2.3.tgz //解压
[root@harbor-server ~]# cd harbor/
[root@harbor-server harbor]# mv harbor.yml.tmpl harbor.yml //修改配置文件名称
[root@harbor-server harbor]# vim habor.yml //修改配置文件
[root@harbor-server harbor]# ./prepare //检测并创建harbor需要的环境
[root@harbor-server harbor]# ./install.sh //安装harbor
浏览器访问80端口
测试是否能成功上传
回到jenkins服务器
[root@jenkins-server ~]# docker pull tomcat:8-jdk8-adoptopenjdk-openj9 //拉取一个tomcat镜像
[root@git-server app.git]# docker tag tomcat:8-jdk8-adoptopenjdk-openj9 192.168.100.13/library/tomcat:v1 //更改tag
[root@jenkins-server ~]# vim /etc/docker/daemon.json //修改配置文件
{"insecure-registries":["192.168.100.13"]} #信任harbor仓库
[root@jenkins-server ~]# systemctl restart docker //重启daocker
[root@jenkins-server ~]# docker login -uadmin -pHarbor12345 192.168.100.13 //登录到docker仓库
[root@git-server app.git]# docker push 192.168.100.13/library/tomcat:v1 //上传镜像
在harbor服务器上查看
配置jenkins
回到git服务器
[git@git-server ~]# ssh-keygen //生成秘钥对,一路回车
[git@git-server app.git]$ cat ~/.ssh/id_rsa //查看私钥并复制
浏览器访问jenkins
pipeline脚本
node {
stage('Git Checkout') {
checkout([$class: 'GitSCM', branches: [[name: '${version}']], extensions: [], userRemoteConfigs: [[credentialsId: 'b4f39d68-f3b2-436a-8259-df4d75fae4bc', url: 'git@192.168.100.11:/home/git/repos/app.git']]])
}
stage('Maven Build') {
sh '''
/usr/local/maven/bin/mvn clean package -Dmaven.test.skip=true
'''
}
stage('Build and Push Image') {
sh '''
REPOSITORY=192.168.100.13/library/javademo:${version}
cat <<-EOF > Dockerfile
FROM 192.168.100.13/library/tomcat:v1
MAINTAINER Zhipeng-He<2281317917@qq.com>
EXPOSE 8080
RUN rm -rf /usr/local/tomcat/webapps/*
ADD target/*.war /usr/local/tomcat/webapps/ROOT.war
EOF
docker build -t $REPOSITORY .
docker login -uadmin -pHarbor12345 192.168.100.13
docker push $REPOSITORY
'''
}
stage('Deploy to Docker') {
sh '''
REPOSITORY=192.168.100.13/library/javademo:${version}
docker rm -f javademo |true
docker pull $REPOSITORY
docker container run -d --name javademo -p 8081:8080 $REPOSITORY
'''
}
}
继上次发布,问题未能解决:
docker部署出现问题后,咋都不能解决以上问题,后来使用了yum的方式焊装了jenkins,瞬间成功,干,很纳闷
浏览器访问后就成功了
远程部署项目到192.168.100.14脚本
stage('Deploy to Docker') {
sh '''
cat <<-EOF > pull.sh
echo '{"insecure-registries":["192.168.100.13"]}' > /etc/docker/daemon.json
systemctl restart docker
docker logout
docker login -uadmin -pHarbor12345 192.168.100.13
sleep 5
REPOSITORY=192.168.100.13/library/javademo:${version}
docker rm -f javademo |true
docker pull \\$REPOSITORY
docker container run -d --name javademo -p 8080:8080 \\$REPOSITORY
EOF
scp pull.sh root@192.168.100.14:/root/
ssh root@192.168.100.14 /bin/bash /root/pull.sh
'''
}