本文共 7325 字,大约阅读时间需要 24 分钟。
在云栖博客 中, 我们基于 搭建了自己的Jenkins-X-Platform, 本文将以一个Spring Boot应用为例继续演示如何使用Jenkins-X-Platform构建、发布和管理自己的应用。
在创建Spring Boot应用之前, 还需要对Jenkins-X-Platform引擎做一些定制化配置:
登录 ,用户名admin, 密码可以在 ~/.jx/jenkinsAuth.yaml 文件中查看。 登录成功后会看到Jenkins-X-Platform默认会创建两个多分支流水线项目 environment-sharkplanet-staging 和 environment-sharkplanet-production, 它们分别负责不同环境下的应用发布和管理。此时两个任务的扫描构建都处于Pending状态:
构建日志为:
创建并配置访问GitHub的凭证:
保存并重新执行扫描构建:
(1)找到 “Disable https certificate check” 选项并勾选
(2)找到Labels为jenkins-maven的Kubernetes Pod Template并确认Docker image使用了最新的构建镜像jenkinsxio/builder-maven:latest, 否则会在应用构建时报错“Error: unknown command "build" for "skaffold"”此步骤的更改是为了避免创建应用时有如下报错:
error: Could not find ConfigMap jenkins-x-docker-registry in namespace jx: configmaps "jenkins-x-docker-registry" not found
从jenkins-x-docker-registry-config 导出编排文件:
# kubectl get configmaps -n jxNAME DATA AGEexposecontroller 1 15hingress-config 5 15hjenkins 6 15hjenkins-tests 1 15hjenkins-x-docker-registry-config 1 15hjenkins-x-git-kinds 2 15hjenkins-x-monocular-api-config 1 15hjenkins-x-monocular-ui-config 1 15hjenkins-x-monocular-ui-vhost 1 15hjx-install-config 2 15h
# kubectl get configmaps jenkins-x-docker-registry-config -n jx --export -o yaml > jenkins-x-docker-registry.yaml
修改名称并创建:
%s/jenkins-x-docker-registry-config/jenkins-x-docker-registry/
# kubectl create -f jenkins-x-docker-registry.yamlconfigmap/jenkins-x-docker-registry created
查看当前环境中的应用列表:
# jx get appsNo applications found in environments staging, production
创建Spring应用, 此步骤会自动生成一个git repo并推送至GitHub, 在Jenkins上生成与之对应的多分支流水线任务,最后生成webhook指向多分支流水线任务:
如果有报错信息如下, 则需要安装jdk:
...The JAVA_HOME environment variable is not defined correctlyThis environment variable is needed to run this programNB: JAVA_HOME should point to a JDK not a JRE exit status 1
在GitHub上查看jenkins-x-demo、environment-sharkplanet-staging和environment-sharkplanet-production三个项目的webhook:
GitHub是无法解析jenkins.jx.aliyunk8s.com这个域名的, 在后续构建中用到这个webhook的地方就会报错, 我们需要做一些修改:
# kubectl edit svc jenkins -n jx
把“type: CLusterIP” 改为“type: LoadBalancer”, 保存退出后在容器服务Kubernetes控制台上查看jenkins服务的外部端点:
修改webhook的 Payload URL并保存。应用创建完毕后,会自动进行多分支流水线jenkins-x-demo的构建:
查看构建日志发现有报错,先点击“Abort”终止此次构建:
此处报错为docker镜像构建和推送问题, 我们这里配置使用 来管理,本次实践构建的镜像url为:registry.cn-hangzhou.aliyuncs.com/xxx/jenkins-x-demo步骤如下:
(1)进入 系统管理->系统设置->全局属性,勾选环境变量并增加键值对:(2)生成docker auth secret[root@iZj6cenjoxeycpx4qfdqmkZ ~]# docker login -u xxx -p xxx registry.cn-hangzhou.aliyuncs.comLogin Succeeded
# kubectl get secret -n jxNAME TYPE DATA AGEcleanup-token-wvhp8 kubernetes.io/service-account-token 3 1ddefault-token-zx5p8 kubernetes.io/service-account-token 3 1dexpose-token-qkw5l kubernetes.io/service-account-token 3 1djenkins Opaque 3 1djenkins-docker-cfg Opaque 1 21hjenkins-git-credentials Opaque 1 1djenkins-git-ssh Opaque 2 1djenkins-hub-api-token Opaque 1 1djenkins-maven-settings Opaque 1 1djenkins-npm-token Opaque 1 1djenkins-release-gpg Opaque 4 1djenkins-ssh-config Opaque 1 1djenkins-token-t2n4j kubernetes.io/service-account-token 3 1djenkins-x-chartmuseum Opaque 2 1djenkins-x-docker-registry-secret Opaque 1 1djenkins-x-mongodb Opaque 2 1djx-basic-auth Opaque 1 1djx-install-config Opaque 3 1djx-pipeline-git-github-github Opaque 2 1dnexus Opaque 1 1dpipelinecontroller-token-tpbkj kubernetes.io/service-account-token 3 1d
# kubectl delete secrets jenkins-docker-cfg -n jxsecret "jenkins-docker-cfg" deleted
# kubectl create secret generic jenkins-docker-cfg -n jx --from-file=/root/.docker/config.jsonsecret/jenkins-docker-cfg created
jenkins-x-demo应用会成功构建Helm Charts并发布到chartmuseum,
访问 可以看到新增加了jenkins-x-demo的chart:继续查看jenkins-x-demo的构建日志:
流水线会创建一个environment-sharkplanet-staging项目的PR, merge PR后, promotion动作执行成功:
jx get appsAPPLICATION STAGING PODS URL PRODUCTION PODS URLjenkins-x-demo 0.0.3 1/1 http://jenkins-x-demo.jx-staging.aliyunk8s.com
绑定hosts后访问:
步骤7中访问的应用并没有准备好发布到生产环境下, 在发布到生产环境之前,我们需要先对其进行开发和测试。
新建一个分支:
# git checkout -b feature切换到一个新分支 'feature'
# cat src/main/resources/static/index.htmlJenkins X Spring Demo
Jenkins X Spring Demo |
保存并提交:
# git add src# git commit -m "add index.html"[feature 5853790] add index.html 1 file changed, 19 insertions(+) create mode 100644 src/main/resources/static/index.html# git push origin featureCounting objects: 11, done.Delta compression using up to 8 threads.Compressing objects: 100% (6/6), done.
在GitHub上创建feature分支到master分支的PR:
PR创建成功后,会通过webhook触发流水线构建:流水线构建成功后会为这个PR的jenkins-x-demo应用创建预览环境haoshuwei-jenkins-x-demo-pr-1并部署应用, 点击"here" 访问(注意绑定hosts):步骤8中我们验证新PR下的应用没问题后,就可以在GitHub上merge PR到master分支:
查看当前staging环境下jenkins-x-demo应用版本为0.0.3:# jx get appsAPPLICATION STAGING PODS URL PRODUCTION PODS URLjenkins-x-demo 0.0.3 1/1 http://jenkins-x-demo.jx-staging.aliyunk8s.com
合并PR后会自动触发新的流水线构建, 构建成功后再查看staging环境下jenkins-x-demo应用版本变为0.0.4:
# jx get appsAPPLICATION STAGING PODS URL PRODUCTION PODS URLjenkins-x-demo 0.0.4 http://jenkins-x-demo.jx-staging.aliyunk8s.com
helm charts仓库也有新版本的更新:
可以再次访问 进行验证。
步骤9中我们更新了staging环境下的jenkins-x-demo应用版本并验证没问题后, 就可以发布到生产环境中:
# git checkout master切换到分支 'master'# jx promote --version 0.0.4 --env production --timeout 20mUsing helmBinary helm with feature flag: nonePromoting app jenkins-x-demo version 0.0.4 to namespace jx-production
构建成功后查看应用信息:
# jx get appsAPPLICATION STAGING PODS URL PRODUCTION PODS URLjenkins-x-demo 0.0.4 1/1 http://jenkins-x-demo.jx-staging.aliyunk8s.com 0.0.4 http://jenkins-x-demo.jx-production.aliyunk8s.com
可以看到生产环境下的应用访问url为:
访问 (注意hosts绑定):转载地址:http://tppzl.baihongyu.com/