使⽤Jenkins和Java进⾏持续集成
本⽂主要内容:
使⽤Jenkinsfile进⾏管道配置
管理第三⽅凭证
集成Jenkins测试报告
Poll 和hook构建触发器
建⽴ pull 请求
springframework jar包导入⾸先,让我们谈谈持续集成(CI)。CI是⼀种流⾏的开发实践,尽可能确保软件⾼质量且可部署。
要采⽤CI,需要做好⼀些关键⼯作:
Git等SCM系统
CI服务器(如Jenkins)
⾃动化测试
⼀些良好的团队CI实践–使你可以缩短构建时间,⽴即修复损坏的构建,频繁提交并保持较⼩的更改
所需⼯具:
Docker
Java 8
运⾏ Jenkins
Jenkins是开源的,开发⼈员可以将其⽤于持续集成,持续交付和持续部署。它来⾃Hudson,这是2004年Sun Microsystems⽤Java编写的CI服务器。
Jenkins Pipeline 是插件,你可以⽤它来⾃动构建,测试和部署的套件。你可以在Jenkinsfile中使⽤特定语法定义管道,你可以在 Pipeline-as-code 模型中将其提交到项⽬的存储库中。
为了快速⼊门,请从Docker HYub中提取Jenkins镜像:
docker pull jenkins/jenkins:lts
然后启动⼀个Jenkins容器:
docker run \ -p 8081:8080 \ -p 50000:50000 \ --name my-jenkins \ -v jenkins_data:/var/jenkins_home jenkins/jenkins:lts
在上⾯的命令中,我们将Jenkins端⼝8080映射到主机端⼝8081,并将Jenkins端⼝50000映射到主机端⼝50000。我们还在host⽂件夹中定义了Jenkins home的存储卷jenkins_data。
当容器启动时,将运⾏初始安装,Jenkins将记录管理员密码:
Jenkins initial setup is required. An admin user has been created and a password generated.Please use the following password to proceed to installation:b518968d266d41d3beb0abef50834fa7This may also be found at: /var/jenkins_home/secrets/initialAdminPas 复制密码,然后登陆localhost:8081进⾏初始设置。
粘贴管理员密码,然后继续。
设置过程将使你可以选择⾃定义要添加的插件。
选择Install Suggested Plugins并继续。
等待安装完成。
设置管理员⽤户数据并继续。
由于这是⼀项测试,请保留默认的Jenkins URL(localhost:8081/)并完成它。
我们准备创建第⼀个Jenkins管道。
Okta OIDC⾝份验证的简单应⽤
我们将使⽤Jenkins通过Okta OIDC⾝份验证⾃动化构建简单的Java应⽤程序,因此让我们⾸先使⽤Spring Intializr 创建该应⽤程序:
curl start.spring.io/starter.zip -d dependencies=web,okta \-d language=java \-d type=maven-project \-d groupId=com.okta.developer \-d artifactId=simpleapp \-d name='Simple Application' \-d description='Demo project for Jenkins CI test' \-d packageName
解压缩⽂件:
unzip simple-app.zip -d simple-appcd simple-app
如果你还没有Okta开发者帐户,请执⾏Okta Maven插件创建⼀个(免费!)并在应⽤程序中配置⾝份验证:
./mvnw com.okta:okta-maven-plugin:setup
你应该看到以下输出:
First name: JimenaLast name: GarbarinoEmail address: ***Company: ***Creating new Okta Organization, this may take a minute:OrgUrl: ***Check your email address to verify your account.Writing Okta SDK config to: /home/indiepopart/.okta/okta.yaml
检查你的电⼦邮件,然后按照说明激活你的Okta帐户。
Maven插件将在src/main/resources/application.properties中⽣成OIDC客户端ID,密钥和发⾏者URL 。因为我们将在公共代码库(如-GitHub)⽤于CI测试时,所以将凭据复制到其他位置,然后从属性⽂件中删除它们。如果你已经拥有Okta Developer帐户,请登录并创建⼀个新应⽤程序:在“应⽤程序”页⾯上,选择 Add Application 。在“创建新应⽤程序”页⾯上,选择“ Web”。给你的应⽤起⼀个令⼈难忘的名称,然后将其添加l 复制发⾏者(你可以在 API > Authorization Servers 下到它),客户端ID和客户端密钥,以备后⽤。
添加⼀个REST Controller
创建⼀个GreetingController类以在登录时向⽤户打招呼。
package com.okta.developer.simpleapp;
import org.annotation.AuthenticationPrincipal;import org.springframewor
k.idc.user.OidcUser;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation
@RestControllerpublic class GreetingController {
@GetMapping('/greeting')public String greet(@AuthenticationPrincipal OidcUser user){ return 'Hello ' + Email(); }}
使⽤Maven Spring Boot插件测试应⽤程序:
OKTA_OAUTH2_CLIENT_ID={youtOktaClientId} \OKTA_OAUTH2_CLIENT_SECRET={yourOktaClientSecret} \OKTA_OAUTH2_ISSUER={yourOktaDomain}/oauth2/default \mvn spring-boot:run
转到localhost:8080/greeting。该应⽤程序应重定向到Okta进⾏登录:
登录后,应⽤程序应显⽰问候响应:
Hello jimena@***
为创建⼀个GitHub 公共存储库,simple-app并按照说明推送现有代码。
git initgit add .git commit -m 'initial commit'git remote add origin github/<your-username>/simple-app.gitgit push -u origin master
Jenkins Pipeline和Jenkinsfile
在Jenkins仪表板中,选择Create New Jobs,设置simple-app为项⽬名称,然后选择Pipeline作为项⽬类型。
在下⼀个屏幕中,选择选项卡 Advanced Project Options 。从右侧的下拉菜单中,选择GitHub + Maven以获取我们将要⾃定义的Jenkinsfile模板。
将管道脚本复制到Jenkinsfile⽂件中。更新GitHub地址并为构建设置Okta凭证。还要更改Maven命令。
pipeline { agent any environment { // use your actual issuer URL here and NOT the placeholder {yourOktaDomain} OKTA_OAUTH2_ISSUER = '{yourOktaDomain}/oauth2/default' OKTA_OAUTH2_CLIENT_ID = credentials(
post { // If Maven was able to run the tests, even if some of the test // failed, record the test results and archive the jar file. success { junit '**/target/surefire-reports/TEST-*.xml' archiveArtifacts 'target/*.jar'
我们正在使⽤environment管道语法的指令来定义OKTA_*构建所需的变量。该指令⽀持credentials()帮助程序从Jenkins环境中检索值。
然后,在请求项⽬构建之前,我们需要在Jenkins中设置Okta托管凭据。
将推Jenkinsfile送到公共存储库。
在 Advanced Project Options 中,对于“管道定义”,选择 Pipeline script from SCM 并完成存储库信息:
SCM:GitHub
资料库URL:github/%3Cyour-username%3E/simple-app.git
凭证:⽆
分⽀说明符:\ * / master
脚本路径:Jenkinsfile
单击“ 保存”创建项⽬。
凭证管理
Jenkins允许你安全地存储第三⽅应⽤程序的凭据,从⽽使Pipeline项⽬⽅便地与第三⽅服务的交互。让我们添加Okta⾝份验证的凭据。
在Jenkins控制台中,转到左侧菜单上的 Credentials ,然后选择 global 。
为创建⼀个“ Secret text ”凭证OKTA_OAUTH2_CLIENT_ID,单击 Add Credentials ,然后选择以下选项:
Kind: Secret text
Scope: global
Secret: {yourOktaClientID}
ID: OKTA_OAUTH2_CLIENT_ID
注意:替换{yourOktaClientID}为你的实际 Client ID 。
对OKTA_OAUTH2_CLIENT_SECRET执⾏相同的操作。
注:存储Jenkins的密钥和拉取代码分⽀请求不应该⼀起使⽤。
现在我们准备构建该项⽬。转到simple-app并选择Build Now。转到 Build History 并选择构建#1。然后选择 Console Output 选项以监视任务。
添加 controller 测试
GitHub和Maven的Jenkinsfile模板已经集成了测试报告,并可以从构建摘要中对其进⾏访问。
让我们在应⽤程序中添加⼀个控制器测试以验证此功能。
将spring-security-test依赖项添加到l:
<dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-test</artifactId> <scope>test</scope></dependency>
创建⼀个新类src/test/java/com/okta/developer/simpleapp/GreetingControllerTest.java:
package com.okta.developer.simpleapp;
import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.st.autoconfigure.web.servlet.AutoConfigureMockMvc;import org.st.autoconfigure.web.servlet.WebMvcTest; @AutoConfigureMockMvc@WebMvcTest@ContextConfiguration(classes={GreetingController.class})
public class GreetingControllerTest {
private final static String ID_TOKEN = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9' + '.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsIm' + 'p0aSI6ImQzNWRmMTRkLTA5ZjYtNDhmZi04YTkzLTdjNmYwMzM 将更改推送到存储库并安排新的构建。完成后,你可以在全局或包级别查看测试结果:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论