docker : Jenkins 拉取 Gitee 代碼塞蹭,構(gòu)建鏡像啟動并上傳私服
1. 環(huán)境準(zhǔn)備工作
# Linux 系統(tǒng)
root@ubuntu:/usr/local/docker/registry# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.2 LTS
Release: 18.04
Codename: bionic
# docker 版本
root@ubuntu:/usr/local/docker/registry# docker version
Client: Docker Engine - Community
Version: 20.10.12
API version: 1.41
Go version: go1.16.12
Git commit: e91ed57
Built: Mon Dec 13 11:45:27 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.12
API version: 1.41 (minimum version 1.12)
Go version: go1.16.12
Git commit: 459d0df
Built: Mon Dec 13 11:43:36 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.12
GitCommit: 7b11cfaabd73bb80907dd23182b9347b4245eb5d
runc:
Version: 1.0.2
GitCommit: v1.0.2-0-g52b36a2
docker-init:
Version: 0.19.0
GitCommit: de40ad0
# docker-compose 版本
root@ubuntu:/usr/local/docker/registry# docker-compose version
Docker Compose version v2.2.0
2. gitee 創(chuàng)建倉庫與項(xiàng)目
gitee 參考地址: https://gitee.com/onnoA/jenkins_test.git
2.1. 新建項(xiàng)目
2.2. 本地克隆項(xiàng)目,并并將自己準(zhǔn)備的測試項(xiàng)目復(fù)制進(jìn)去署穗,并上傳 gitee
項(xiàng)目創(chuàng)建 docker 目錄, docker 目錄下新建文件 Dockerfile 、docker-compose.yml
Dockerfile
FROM openjdk:8-jre
MAINTAINER onnoa <onnoaheng@163.com>
ENV APP_VERSION 1.0.0-SNAPSHOT
ENV DOCKERIZE_VERSION v0.6.1
RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
&& tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
&& rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz
RUN mkdir /app
COPY jenkins_test-$APP_VERSION.jar /app/app.jar
ENTRYPOINT ["dockerize", "-timeout", "5m", "-wait", "tcp://192.168.40.129:3306", "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app/app.jar"]
EXPOSE 8090
docker-compose.yml
version: '3.1'
services:
jenkins_test:
image: 192.168.40.129:5000/jenkins_test:v1.0.0
container_name: jenkins_test
ports:
- 8090:8090
2.3. 創(chuàng)建標(biāo)簽
3. 基于 docker-compose 安裝 registry
3.1. 新建目錄
mkdir -p /usr/local/docker/registry
# 進(jìn)入目錄
cd /usr/local/docker/registry
3.2. 新建 docker-compose.yml 文件
vi docker-compose.yml
docker-compose.yml 文件內(nèi)容
version: '3.1'
services:
registry:
image: registry
restart: always
container_name: registry
ports:
- 5000:5000
volumes:
- /usr/local/docker/registry/data:/var/lib/registry
3.3. 啟動 docker-compose.yml
docker-compose up -d
3.4. 頁面訪問
http://ip:5000/v2/
3.5. 配置 docker registry 客戶端
在 /etc/docker/daemon.json
中增加如下內(nèi)容(如果文件不存在請新建該文件)
{
"registry-mirrors": [
"https://registry.docker-cn.com"
],
"insecure-registries": [
"ip:5000"
]
}
<strong style="color:red;"> 注意:該文件必須符合 json 規(guī)范丰捷,否則 Docker 將不能啟動。</strong>
重新啟動服務(wù)寂汇。
sudo systemctl daemon-reload
sudo systemctl restart docker
檢查客戶端配置是否生效
docker info
# 返回以下內(nèi)容則說明配置生效
Insecure Registries:
192.168.40.129:5000
4. docker 安裝 jenkins與配置
4.1. 基于docker-compose 安裝 jenkins
新建目錄
mkdir -p /usr/local/docker/jenkins
jenkins 目錄下新增 docker-compose.yml 文件
vi docker-compose.yml
docker-compose.yml 文件內(nèi)容
version: '3.1'
services:
jenkins:
restart: always
image: jenkins/jenkins:latest-jdk8
container_name: jenkins
ports:
# 發(fā)布端口
- 8085:8080
# 基于 JNLP 的 Jenkins 代理通過 TCP 端口 50000 與 Jenkins master 進(jìn)行通信
- 50000:50000
environment:
TZ: Asia/Shanghai
volumes:
- ./data:/var/jenkins_home
在jenkins 目錄下使用 docker-compose up 命令啟動 jenkins病往。若第一次啟動失敗。則通過命令修改數(shù)據(jù)卷權(quán)限
chown -R 1000 /usr/local/docker/jenkins/data
頁面訪問 jenkins : http://ip:8085
查看初始密碼
# 第一種查看密碼方式
docker logs jenkins
# 第二種
cat /usr/local/docker/jenkins/data/secrets/initialAdminPassword
4.2. jenkins 頁面配置
4.2.1. 插件安裝
選擇安裝插件:
需要安裝的插件
Dashboard View
Publish over SSH
Maven Integration plugin
Locale 本地化插件 (顯示中文)
Extended Choice Parameter 動態(tài)參數(shù)插件(支持一鍵回滾)
若在線無法安裝相應(yīng)的插件骄瓣,可選擇離線安裝的方式停巷, Jenkins 離線插件下載目錄
<strong style="color:red;"> **注意:若選擇的插件安裝失敗,則先進(jìn)入下一步榕栏,創(chuàng)建 jenkins 用戶畔勤,進(jìn)入jenkins 頁面再進(jìn)行插件的安裝。系統(tǒng)管理 --》插件管理 扒磁,搜索插件進(jìn)行安裝即可庆揪。 **</strong>
4.2.2. 基礎(chǔ)配置
4.2.2.1. 本地化
中文本地化: 系統(tǒng)管理 -》 系統(tǒng)設(shè)置 -》 Locale
4.2.2.2. 配置 Public Over SSH
配置 open ssh: 系統(tǒng)管理 -》 系統(tǒng)設(shè)置 -》Publish over SSH (需要安裝Publish over SSH插件成功才會有此選項(xiàng)) -》 新增
高級 -》 輸入服務(wù)器密碼
下拉,點(diǎn)擊 Test Connection 渗磅,若左邊返回成功嚷硫,則說明能成功連接上該服務(wù)器
[圖片上傳失敗...(image-173e15-1641782109458)]
4.2.2.3. 安裝 jdk 與 maven
Jenkins 安裝 Java 與 Maven
將 java
和 maven
的jar上傳到j(luò)enkins的宿主機(jī)路徑:/usr/local/docker/jenkins/data
目錄。并進(jìn)行解壓始鱼。
解壓:
tar -zxvf xxx.tar.gz
# 文件分享連接: https://pan.baidu.com/s/1f6dA0jobOY2SIMGy2IHgiA 密碼:zhnb
- 安裝 jdk
系統(tǒng)管理-》global tool configuration(通用工具配置)-》JDK 安裝 -》新增jdk
- 安裝 maven
系統(tǒng)管理-》global tool configuration(通用工具配置)-》JDK 安裝 -》新增 maven
4.2.2.4. 配置 jenkins 與 gitee 的免密登錄
配置 jenkins 與 gitee 免密登錄
- 交互式進(jìn)入 Jenkins 容器
docker exec -it jenkins /bin/bash
- 生成 SSH KEY
ssh-keygen -t rsa -C "your_email@example.com"
一直回車...
- 查看公鑰
cat /var/jenkins_home/.ssh/id_rsa.pub
- 復(fù)制公鑰到 Gitee
訪問 gitee 倉庫 -》 頭像 -》 設(shè)置 -》 SSH公鑰
- 手動克隆一次項(xiàng)目仔掸,該步驟的主要作用是為了生成和服務(wù)器的驗(yàn)證信息
克隆之前,交互式進(jìn)入 jenkins docker exec -it jenkins /bin/bash医清。
cd
回車起暮,后再git clone gitee 項(xiàng)目地址
, 過程種輸入yes
, 此操作是為了拿到cd .ssh/
目錄下的known_hosts
文件会烙。
4.2.2.5. jenkins 配置項(xiàng)目(分兩次配置項(xiàng)目)
- jenkins 第一次配置項(xiàng)目
新建任務(wù) -》構(gòu)建一個Maven 項(xiàng)目(并輸入項(xiàng)目名稱: 如 jenkins_test) -》
<strong style="color:red;">注意: git 配置的地址需要是配置gitee項(xiàng)目的 ssh 項(xiàng)目地址负懦。</strong>
- jenkins 第二次配置
Extended Choice Paramter Name: RELEASE_VERSION
Basic Parameter Types: Single Select
Choose Source for Value: Groovy Script
源碼管理: 無
Post Steps: Run regardless of build result
Execute shell 命令: shell 腳本如下
Add post-build step: Send files or execute commands over SSH
SSH Server Name: 選擇配置的 Public Over SSH 服務(wù)器(即要部署該項(xiàng)目的服務(wù)器)
Transfer Set
Source files:**/*.jar,docker/**
Remote directory: jenkins_test(項(xiàng)目名稱,主要是當(dāng)部署項(xiàng)目是柏腻,在部署目錄 /usr/local/deploy 下能夠根據(jù)項(xiàng)目名進(jìn)行區(qū)分) Exec command: linux 執(zhí)行命令如下
Groovy 腳本
def ver_keys = [ 'bash', '-c', 'cd /var/jenkins_home/workspace/jenkins_test;git pull>/dev/null; git remote prune origin >/dev/null; git tag -l|sort -r |head -10 ' ]
ver_keys.execute().text.tokenize('\n')
shell 腳本
echo $RELEASE_VERSION
cd /var/jenkins_home/workspace/jenkins_test
git checkout $RELEASE_VERSION
git pull origin $RELEASE_VERSION
mvn clean install
Linux 執(zhí)行命令
cd /usr/local/deploy/jenkins_test
cp target/jenkins_test-1.0.0-SNAPSHOT.jar docker
cd docker
docker build -t 192.168.40.129:5000/jenkins_test:v1.0.0 .
docker push 192.168.40.129:5000/jenkins_test:v1.0.0
docker-compose down
docker-compose up -d
docker image prune -f
選擇前面配置的 Public Over SSH 服務(wù)器(即要部署的服務(wù)器)
Exec command
cd /usr/local/deploy/jenkins_test
cp target/jenkins_test-1.0.0-SNAPSHOT.jar docker
cd docker
docker build -t 192.168.40.129:5000/jenkins_test:v1.0.0 .
docker push 192.168.40.129:5000/jenkins_test:v1.0.0
docker-compose down
docker-compose up -d
docker image prune -f
進(jìn)行構(gòu)建: 點(diǎn)擊進(jìn)入項(xiàng)目 --》 Build with Paramters(參數(shù)化構(gòu)建)纸厉,我們就可以根據(jù) gitee 項(xiàng)目中配置的標(biāo)簽進(jìn)行版本發(fā)布與回滾。如五嫂,我現(xiàn)在有 v1.0.0 與 v1.0.1 兩個版本颗品,當(dāng) v1.0.1 有問題時肯尺,我可以回滾到 v1.0.0 版本