Docker 安裝 Jenkins 配置自動化部署
1. Docker 安裝 Jenkins
1.1 拉取鏡像文件
docker pull jenkins/jenkins
1.2 創建掛載文件目錄
mkdir -p $HOME/jenkins_home
1.3 啟動容器
docker run -d -p 8080:8080 -v $HOME/jenkins_home:/var/jenkins_home --name jenkins jenkins/jenkins
1.4 進入容器查看初始密碼
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
1.5 登錄控制臺完成初始化
選擇安裝推薦的插件
2. 配置自動化部署
2.1 配置項目文件
2.1.1 創建DockerFile文件
文件位置與Java文件目錄位置平級:
${WORKSPACE}/src/main/java
${WORKSPACE}/src/main/docker/DockerFile
# 該鏡像需要依賴的基礎鏡像
FROM openjdk:8
ARG JAR_FILE
# 復制打包完成后的jar文件到/opt目錄下
COPY ${JAR_FILE} /project-name.jar
# 運行過程中創建一個project-name.jar文件
RUN bash -c 'touch /project-name.jar'
# 聲明服務運行在端口
EXPOSE 8801
ENV JAVA_OPTS="-Xms512m -Xmx2048m"
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /project-name.jar" ]
# 指定維護者的名字
MAINTAINER name
2.1.2 添加pom文件插件
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><goal>repackage</goal></goals></execution></executions><configuration><includeSystemScope>true</includeSystemScope></configuration></plugin><plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.0.0</version><executions><execution><id>build-image</id><phase>package</phase><goals><goal>build</goal></goals></execution></executions><configuration><!--生產的鏡像名稱和版本--><imageName>project-category/${project.artifactId}:${project.version}</imageName><dockerHost>http://${dockerHost}:2375</dockerHost><forceTags>true</forceTags><!--dockerfile的位置--><dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory><!--jar名稱配置,用在dockerfile中,需要自己寫的可不用此配置--><buildArgs><JAR_FILE>${project.build.finalName}.jar</JAR_FILE></buildArgs><!--jar源位置--><resources><resource><targetPath>/</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources></configuration><dependencies><dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version></dependency></dependencies></plugin></plugins><!--build節點增加內容--><resources><resource><directory>src/main/resources</directory><!--開啟過濾,用指定的參數替換directory下的文件中的參數--><filtering>true</filtering></resource></resources>
</build>
2.2 配置Jenkins
2.2.1 創建項目部署腳本
2.2.2 選擇構建自由風格項目
2.2.3 General - 丟棄舊的構建歷史,節省磁盤空間
2.2.4 源碼管理 - 配置Git代碼地址
1,配置Git地址(SSH)
2,配置賬號密碼
3,配置代碼分支
2.2.5 源碼管理 - 高級克隆行為
2.2.6 Build Steps - 調用頂層 Maven 目標
2.2.6.1 編譯依賴項目
如果當前項目依賴了本地其他項目,則需要先打包依賴項目,沒有則跳過此步驟
目標:clean install -pl rely-project-name -am
POM:${WORKSPACE}/rely-project-name/pom.xml
注:依賴項目的pom文件位置
2.2.6.2 打包部署項目
前提:此步驟需要目標服務器上的Docker進行過
新增用戶組
操作和開發2375端口
操作目標: clean package -Pdev -DdockerHost=ip docker:build
注:-P 代表走不同的配置環境(非必須)
POM:${WORKSPACE}/project-name/pom.xml
注:打包項目的pom文件位置
2.2.7 Build Steps - Execute shell script on remote host using ssh
在目標部署服務器上將代碼打包成鏡像,并啟動為容器
1,配置SSH賬號密碼
2,Docker啟動容器命令
-p 端口設置需要與DockerFile文件設置一致
-d 鏡像名稱需要與本地項目pom文件中配置的一致
docker stop project-center
echo '----stop container----'
docker rm project-center
echo 'rm cont'
docker rmi `docker images | grep none | awk '{print $3}'`
echo '----rm none images----'
docker run -it --network=host -p 8801:8801 --name project-center -d project-category/project-name:1.0-SNAPSHOT
echo '----start container----'
docker cp -L /usr/share/zoneinfo/Asia/Shanghai project-center:/etc/localtime
docker cp -L /usr/share/zoneinfo/Asia/Shanghai project-center:/etc/timezone
docker restart project-center