1. 拉取Jenkins镜像
访问Jenkins,在Stable (LTS)下找到最新版本号替换如下命令:
docker pull jenkins/jenkins:2.541.2-lts
2. 创建docker-compose文件
mkdir -p /usr/local/docker/jinkins_docker
cd /usr/local/docker/jinkins_docker/
vi docker-compose.yml
1 | |
4. 启动docker-compose
docker-compose up -d
第一次启动会创建data目录,但是没权限,此时停止,修改Jenkins插件更新源后赋予权限:
docker-compose down
vim data/hudson.model.UpdateCenter.xml
1 | |
chmod -R 777 ../jinkins_docker/
docker-compose up -d
此时通过以下命令可以看到Jenkins的管理员密码:
docker logs -f jenkins
5. Jenkins初始化
- 在宿主机通过 http://10.10.10.11:8888 访问Jenkins,输入刚获取的管理员密码。
- 选择
选择插件来安装,在新页面保持默认点击安装,等待安装完成。 - 使用设置的新密码重新登陆Jenkins,点击右上角齿轮,点击
全局工具配置。 - 在后端执行mv /usr/local/{maven,jdk} /usr/local/docker/jinkins_docker/data/`把Maven和JDK放到Jenkins的数据目录。
- 返回前端指定Maven和JDK地址,注意使用容器地址而不是宿主机地址。
- 在前端点击右上角齿轮,点击
插件管理,在Available plugins搜索Publish Over SSH、Git Parameter安装。 - 在前端点击右上角齿轮,点击
系统配置,最后找到Publish Over SSH下的SSH Server,按情况填写账号密码等信息。
6. 创建Gitlab仓库并提交本地代码
- 打开Gitlab创建新项目
mytest,可见性选择公开。 - 点击
mytest,点击项目设置,点击仓库,点击受保护的分支,取消保护。 - 在本地项目文件夹打开
Git bash,依次输入以下命令:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23在当前目录初始化一个新的 Git 仓库 git init 设置远程仓库的 URL地址(origin是远程仓库的默认名称) git remote set-url origin http://10.10.10.11:8888/root/mytest.git 指定分支为main branch -M main 全局配置 Git的用户名 git config --global user.name "loonzh" 全局配置 Git 的用户邮箱 git config --global user.email "loonzh@qq.com" 关闭 SSL 证书验证 git config --global http.sslVerify false 允许使用旧版/不安全的 HTTP 协议 git config --global http.unsafeLegacyProtocolCheck true 配置凭证助手为manager,避免每次推送都输入密码 git config --global credential.helper manager 将当前目录(.)的所有文件添加到暂存区 git add . 将暂存区的文件提交到本地仓库(-m 后面是提交说明) git commit -m "Initial commit" 将暂存区的文件提交到本地仓库 将本地代码推送到远程仓库(-u 建立本地分支与远程分支的关联,后续可直接用 git push) git push -uf origin main - 打开Gitlab,项目文件已经push到仓库中。
7. Jenkins实现基础CI操作
- 打开Jenkins,点击
新建Item,输入项目名后选择Freestyle project。 - 在
源码管理处配置Gitlab地址并指定分支为main。 - 点击
Build Steos,选择调用顶层 Maven 目标,选择配置好的maven版本,在目标框输入clean package -DskipTests。 - 点击
With Ant,选择之前配置的JDK。 - 点击
构建后操作,选择Send build artifacts over SSH,在Source files填写target/*.jar docker/*。 - 在
Exec command填写:1
2
3
4
5cd /usr/local/test/docker mv ../target/*jar ./ docker-compose down docker-compose up -d --build docker image prune -f - 在
docker目录创建Dockerfile和docker-compose.yml,推送文件后点击立即构建,第一次需要下载镜像所以速度较慢,构建完成后访问http://10.10.10.12:8081即可看到mytest的欢迎页。
Dockerfile示例:
docker pull ringcentral/jdk:8u202
1 | |
docker-compose.yml示例:
1 | |
8. Jenkins实现基础CD操作
- 在
配置里勾选参数化构建过程,添加Git 参数,名称和描述自定义,参数类型选标签,默认值填origin/main。 - 点击
Build Steos,选择执行 shell,输入git checkout $tag后把框体移动到调用顶层 Maven 目标上方。 - 打开Gitib新增标签
1.0.0,保存当前版本。 - 开发更改代码后push,在Gitlib新增标签
1.0.1。 - 在Jenkins点击
Build with Parameters,选择版本,访问http://10.10.10.12:8081即可看到mytest的欢迎页相应变化。
9. Jenkins使用宿主机的Docker
cd /usr/local/docker/jinkins_docker
docker-compose down
vi docker-compose.yml,在volumes:项下追加:
1 | |
groupadd docker
chown root:docker /etc/docker/daemon.json
chown root:docker /var/run/docker.sock
docker-compose up -d
10. 在Docker添加Harbor仓库地址
vi /etc/docker/daemon.json,在"registry-mirrors": [的上一行追加"insecure-registries": ["10.10.10.12:80"],。
systemctl restart docker
11. 目标服务器构建制作镜像脚本
vi deploy.sh
1 | |
chmod a+x deploy.sh
mv deploy.sh /usr/bin/
12. Jenkins制作镜像并推送Harbor
- 点击
General,在参数化构建过程最下边点击添加参数,选择字符参数,名称hostPort,默认值8081。 - 再次点击
添加参数,选择字符参数,名称containerPort,默认值8080。 - 在项目的
配置里,点击Build Steps,在Execute SonarQube Scanner后边增加构建步骤,选择执行 shell。1
2
3
4
5mv target/*.jar docker/ docker build -t ${JOB_NAME}:$tag docker/ docker login -u admin -p Harbor12345 10.10.10.12:80 docker tag ${JOB_NAME}:$tag 10.10.10.12:80/library/${JOB_NAME}:$tag docker push 10.10.10.12:80/library/${JOB_NAME}:$tag - 在
构建后操作,清空Send build artifacts over SSH的内容,在Exec command输入deploy.sh 10.10.10.12:80 library ${JOB_NAME} $tag $hostPort $containerPort。 - 在本地项目删除
Dockerfile,更新项目文件版本,推送到Gitlab,在Gitlab新增标签2.0.0。 - 在Jenkins点击
Build with Parameters,选择标签2.0.0,访问http://10.10.10.12:8081即可看到mytest的欢迎页相应变化。
13. Jenkins使用Pipeline script
- 打开Jenkins,点击
新建Item,输入项目名后选择流水线。 - 点击
流水线选择Pipeline script from SCM,在SCM处选择Git,在Repository URL输入复制的Gitlab项目拉取地址。 - 本地项目根目录创建
Jenkinsfile文件,在environment里追加如下内容:1
2
3
4
5harborUser = 'admin' harborPasswd = 'Harbor12345' harborAddress = '10.10.10.12:80' harborRepo = 'library' sonarqubeUrl = 'http://10.10.10.12:9000' - 在
配置里勾选参数化构建过程,添加Git 参数,名称和描述自定义,参数类型选标签,默认值填origin/main;点击添加参数,选择字符参数,名称hostPort,默认值8081;点击添加参数,选择字符参数,名称containerPort,默认值8080。 - 点击
流水线语法,选择checkout: Check out from version control,在Repository URL输入复制的Gitlab项目拉取地址,点击生成流水线脚本,将生成的命令放到Jenkinsfile的steps里,需要将*/master替换为${tag}。 - 在
流水线语法选择sh: Shell Script,输入/var/jenkins_home/maven/bin/mvn clean package -DskipTests后点击生成流水线脚本,将生成的命令放到Jenkinsfile的steps里。 - 在
流水线语法选择sh: Shell Script,输入/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.host.url=${sonarqubeUrl} -Dsonar.source=./ -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.java.binaries=./target/ -Dsonar.login=[SonarQube密钥]后点击生成流水线脚本,将生成的命令放到Jenkinsfile的steps里。 - 在
Jenkinsfile的environment里追加如下内容:1
2
3
4harborUser = 'admin' harborPasswd = 'Harbor12345' harborAddress = '10.10.10.12:80' harborRepo = 'library' - 在
流水线语法选择sh: Shell Script,输入如下内容后点击生成流水线脚本,将生成的命令放到Jenkinsfile的steps里:1
2
3
4
5mv target/*.jar docker/ docker build -t ${JOB_NAME}:${tag} docker/ docker login -u ${harborUser} -p ${harborPasswd} ${harborAddress} docker tag ${JOB_NAME}:${tag} ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag} docker push ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag} - 在
流水线语法选择sshPublisher: Send build artifacts over SSH,在Exec command输入deploy.sh ${harborAddress} ${harborRepo} ${JOB_NAME} ${tag} ${hostPort} ${containerPort}后点击生成流水线脚本,将生成的命令放到Jenkinsfile的steps里: - 在本地项目保存
Jenkinsfile文件,推送到Gitlab,在Jenkins点击Build with Parameters,选择标签,访问http://10.10.10.12:8081即可看到loonzh的欢迎页。